diff --git a/.gitmodules b/.gitmodules index 12ea8dff08..ea015d8ce3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,191 @@ path = Drivers/STM32F4xx_HAL_Driver url = https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git branch = master +[submodule "Drivers/BSP/STM32F4xx-Nucleo"] + path = Drivers/BSP/STM32F4xx-Nucleo + url = https://github.com/STMicroelectronics/stm32f4xx-nucleo-bsp.git + branch = main +[submodule "Drivers/BSP/STM32F4xx_Nucleo_144"] + path = Drivers/BSP/STM32F4xx_Nucleo_144 + url = https://github.com/STMicroelectronics/stm32f4xx-nucleo-144-bsp.git + branch = main +[submodule "Drivers/BSP/STM32F4-Discovery"] + path = Drivers/BSP/STM32F4-Discovery + url = https://github.com/STMicroelectronics/stm32f4discovery-bsp + branch = main +[submodule "Drivers/BSP/STM32F401-Discovery"] + path = Drivers/BSP/STM32F401-Discovery + url = https://github.com/STMicroelectronics/32f401cdiscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM32F411E-Discovery"] + path = Drivers/BSP/STM32F411E-Discovery + url = https://github.com/STMicroelectronics/32f411ediscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM32412G-Discovery"] + path = Drivers/BSP/STM32412G-Discovery + url = https://github.com/STMicroelectronics/32f412gdiscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM32F413H-Discovery"] + path = Drivers/BSP/STM32F413H-Discovery + url = https://github.com/STMicroelectronics/32f413hdiscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM32F429I-Discovery"] + path = Drivers/BSP/STM32F429I-Discovery + url = https://github.com/STMicroelectronics/32f429idiscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM32469I-Discovery"] + path = Drivers/BSP/STM32469I-Discovery + url = https://github.com/STMicroelectronics/32f469idiscovery-bsp.git + branch = main +[submodule "Drivers/BSP/STM324x9I_EVAL"] + path = Drivers/BSP/STM324x9I_EVAL + url = https://github.com/STMicroelectronics/stm324x9i-eval-bsp.git + branch = main +[submodule "Drivers/BSP/STM324xG_EVAL"] + path = Drivers/BSP/STM324xG_EVAL + url = https://github.com/STMicroelectronics/stm324xg-eval-bsp.git + branch = main +[submodule "Drivers/BSP/STM32446E_EVAL"] + path = Drivers/BSP/STM32446E_EVAL + url = https://github.com/STMicroelectronics/stm32446e-eval-bsp.git + branch = main +[submodule "Drivers/BSP/STM32469I_EVAL"] + path = Drivers/BSP/STM32469I_EVAL + url = https://github.com/STMicroelectronics/stm32469i-eval-bsp.git + branch = main +[submodule "Drivers/BSP/Components/Common"] + path = Drivers/BSP/Components/Common + url = https://github.com/STMicroelectronics/stm32-bsp-common.git + branch = main +[submodule "Drivers/BSP/Components/ampire480272"] + path = Drivers/BSP/Components/ampire480272 + url = https://github.com/STMicroelectronics/stm32-ampire480272.git + branch = main +[submodule "Drivers/BSP/Components/ampire640480"] + path = Drivers/BSP/Components/ampire640480 + url = https://github.com/STMicroelectronics/stm32-ampire640480.git + branch = main +[submodule "Drivers/BSP/Components/cs43l22"] + path = Drivers/BSP/Components/cs43l22 + url = https://github.com/STMicroelectronics/stm32-cs43l22.git + branch = main +[submodule "Drivers/BSP/Components/dp83848"] + path = Drivers/BSP/Components/dp83848 + url = https://github.com/STMicroelectronics/stm32-dp83848.git + branch = main +[submodule "Drivers/BSP/Components/exc7200"] + path = Drivers/BSP/Components/exc7200 + url = https://github.com/STMicroelectronics/stm32-exc7200.git + branch = main +[submodule "Drivers/BSP/Components/ft3x67"] + path = Drivers/BSP/Components/ft3x67 + url = https://github.com/STMicroelectronics/stm32-ft3x67.git + branch = main +[submodule "Drivers/BSP/Components/ft6x06"] + path = Drivers/BSP/Components/ft6x06 + url = https://github.com/STMicroelectronics/stm32-ft6x06.git + branch = main +[submodule "Drivers/BSP/Components/i3g4250d"] + path = Drivers/BSP/Components/i3g4250d + url = https://github.com/STMicroelectronics/stm32-i3g4250d.git + branch = main +[submodule "Drivers/BSP/Components/ili9325"] + path = Drivers/BSP/Components/ili9325 + url = https://github.com/STMicroelectronics/stm32-ili9325.git + branch = main +[submodule "Drivers/BSP/Components/ili9341"] + path = Drivers/BSP/Components/ili9341 + url = https://github.com/STMicroelectronics/stm32-ili9341.git + branch = main +[submodule "Drivers/BSP/Components/l3gd20"] + path = Drivers/BSP/Components/l3gd20 + url = https://github.com/STMicroelectronics/stm32-l3gd20.git + branch = main +[submodule "Drivers/BSP/Components/lan8742"] + path = Drivers/BSP/Components/lan8742 + url = https://github.com/STMicroelectronics/stm32-lan8742.git + branch = main +[submodule "Drivers/BSP/Components/lis302dl"] + path = Drivers/BSP/Components/lis302dl + url = https://github.com/STMicroelectronics/stm32-lis302dl.git + branch = main +[submodule "Drivers/BSP/Components/lis3dsh"] + path = Drivers/BSP/Components/lis3dsh + url = https://github.com/STMicroelectronics/stm32-lis3dsh.git + branch = main +[submodule "Drivers/BSP/Components/ls016b8uy"] + path = Drivers/BSP/Components/ls016b8uy + url = https://github.com/STMicroelectronics/stm32-ls016b8uy.git + branch = main +[submodule "Drivers/BSP/Components/lsm303agr"] + path = Drivers/BSP/Components/lsm303agr + url = https://github.com/STMicroelectronics/stm32-lsm303agr.git + branch = main +[submodule "Drivers/BSP/Components/lsm303dlhc"] + path = Drivers/BSP/Components/lsm303dlhc + url = https://github.com/STMicroelectronics/stm32-lsm303dlhc.git + branch = main +[submodule "Drivers/BSP/Components/mfxstm32l152"] + path = Drivers/BSP/Components/mfxstm32l152 + url = https://github.com/STMicroelectronics/stm32-mfxstm32l152.git + branch = main +[submodule "Drivers/BSP/Components/n25q128a"] + path = Drivers/BSP/Components/n25q128a + url = https://github.com/STMicroelectronics/stm32-n25q128a.git + branch = main +[submodule "Drivers/BSP/Components/n25q256a"] + path = Drivers/BSP/Components/n25q256a + url = https://github.com/STMicroelectronics/stm32-n25q256a.git + branch = main +[submodule "Drivers/BSP/Components/n25q512a"] + path = Drivers/BSP/Components/n25q512a + url = https://github.com/STMicroelectronics/stm32-n25q512a.git + branch = main +[submodule "Drivers/BSP/Components/nt35510"] + path = Drivers/BSP/Components/nt35510 + url = https://github.com/STMicroelectronics/stm32-nt35510.git + branch = main +[submodule "Drivers/BSP/Components/otm8009a"] + path = Drivers/BSP/Components/otm8009a + url = https://github.com/STMicroelectronics/stm32-otm8009a.git + branch = main +[submodule "Drivers/BSP/Components/ov2640"] + path = Drivers/BSP/Components/ov2640 + url = https://github.com/STMicroelectronics/stm32-ov2640.git + branch = main +[submodule "Drivers/BSP/Components/ov5640"] + path = Drivers/BSP/Components/ov5640 + url = https://github.com/STMicroelectronics/stm32-ov5640.git + branch = main +[submodule "Drivers/BSP/Components/s25fl512s"] + path = Drivers/BSP/Components/s25fl512s + url = https://github.com/STMicroelectronics/stm32-s25fl512s.git + branch = main +[submodule "Drivers/BSP/Components/s5k5cag"] + path = Drivers/BSP/Components/s5k5cag + url = https://github.com/STMicroelectronics/stm32-s5k5cag.git + branch = main +[submodule "Drivers/BSP/Components/st7735"] + path = Drivers/BSP/Components/st7735 + url = https://github.com/STMicroelectronics/stm32-st7735.git + branch = main +[submodule "Drivers/BSP/Components/st7789h2"] + path = Drivers/BSP/Components/st7789h2 + url = https://github.com/STMicroelectronics/stm32-st7789h2.git + branch = main +[submodule "Drivers/BSP/Components/stmpe1600"] + path = Drivers/BSP/Components/stmpe1600 + url = https://github.com/STMicroelectronics/stm32-stmpe1600.git + branch = main +[submodule "Drivers/BSP/Components/stmpe811"] + path = Drivers/BSP/Components/stmpe811 + url = https://github.com/STMicroelectronics/stm32-stmpe811.git + branch = main +[submodule "Drivers/BSP/Components/ts3510"] + path = Drivers/BSP/Components/ts3510 + url = https://github.com/STMicroelectronics/stm32-ts3510.git + branch = main +[submodule "Drivers/BSP/Components/wm8994"] + path = Drivers/BSP/Components/wm8994 + url = https://github.com/STMicroelectronics/stm32-wm8994.git + branch = main diff --git a/Documentation/STM32CubeF4GettingStarted.pdf b/Documentation/STM32CubeF4GettingStarted.pdf index fde64f59d7..7a2254bfa4 100644 Binary files a/Documentation/STM32CubeF4GettingStarted.pdf and b/Documentation/STM32CubeF4GettingStarted.pdf differ diff --git a/Drivers/BSP/Components/Common b/Drivers/BSP/Components/Common new file mode 160000 index 0000000000..1e18c5afdf --- /dev/null +++ b/Drivers/BSP/Components/Common @@ -0,0 +1 @@ +Subproject commit 1e18c5afdf1f5971a35c8e2f88b6a21e5568ed92 diff --git a/Drivers/BSP/Components/Common/Release_Notes.html b/Drivers/BSP/Components/Common/Release_Notes.html deleted file mode 100644 index e173ae5366..0000000000 --- a/Drivers/BSP/Components/Common/Release_Notes.html +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - Release Notes for BSP Components Common Drivers - - - - - - - - - - -
-


-

-
- - - - - - -
- - - - - - - - - -
-

Back to Release page

-
- -

Release -Notes for BSP Components Common  Drivers

- -

Copyright -2015 STMicroelectronics

-

-
-

 

- - - - - - -
- - -

Update History

-

V4.0.1 / 21-July-2015

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • tsensor.h: Fix compilation issue on TSENSOR_InitTypeDef

V4.0.0 / 22-June-2015

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • accelero.h: add *DeInit field in ACCELERO_DrvTypeDef structure
  • audio.h: add *DeInit field in AUDIO_DrvTypeDef structure
  • idd.h: 
    • add Shunt0StabDelay, Shunt1StabDelay, Shunt2StabDelay, Shunt3StabDelay, Shunt4StabDelay and ShuntNbOnBoard fields in IDD_ConfigTypeDef structure
    • rename ShuntNumber field to ShuntNbUsed in IDD_ConfigTypeDef structure
  • magneto.h: add *DeInit field in MAGNETO_DrvTypeDef structure
  • Important Note:  this release V4.0.0 is not backward compatible with V3.0.0

V3.0.0 / 28-April-2015

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • accelero.h: add *LowPower field in ACCELERO_DrvTypeDef structure
  • magneto.h: add *LowPower field in MAGNETO_DrvTypeDef structure
  • gyro.h: add *DeInit and *LowPower fields in GYRO_DrvTypeDef structure
  • camera.h: add CAMERA_COLOR_EFFECT_NONE define
  • idd.h: 
    • add MeasureNb, DeltaDelayUnit and DeltaDelayValue fields in IDD_ConfigTypeDef structure
    • rename PreDelay field to PreDelayUnit in IDD_ConfigTypeDef structure
    -
  • Important Note:  this release V3.0.0 is not backward compatible with V2.2.0
    -
  • -

V2.2.0 / 09-February-2015

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • Magnetometer driver function prototypes added (magneto.h file)
  • Update "idd.h" file to provide DeInit() and WakeUp() services in IDD current measurement driver

V2.1.0 / 06-February-2015

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • IDD current measurement driver function prototypes added (idd.h file)
  • io.h: add new typedef enum IO_PinState with IO_PIN_RESET and IO_PIN_SET values

V2.0.0 / 15-December-2014

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • Update "io.h" file to support MFX (Multi Function eXpander) device available on some STM32 boards
    • add new entries for IO_ModeTypedef enumeration structure
    • update the IO_DrvTypeDef structure
      • Update all return values and function parameters to uint32_t
      • Add a return value for Config field
  • Important Note:  this version V2.0.0 is not backward compatible with V1.2.1

V1.2.1 / 02-December-2014

-

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • gyro.h: change “__GIRO_H” by “__GYRO_H” to fix compilation issue under Mac OS

V1.2.0 / 18-June-2014

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • EPD (E Paper Display)  driver function prototype added (epd.h file)
    -

V1.1.0 / 21-March-2014

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • Temperature Sensor driver function prototype added

V1.0.0 / 18-February-2014

- - - - - - - - - - - - - - - - -

Main -Changes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • First official release with  Accelerometer, Audio, Camera, Gyroscope, IO, LCD and Touch Screen drivers function prototypes

License

-
-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met:
-
-
  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions -in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived
    -
    -
-        from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- -
-

- - -
-
-

For -complete documentation on STM32 Microcontrollers -visit www.st.com/STM32

-
-

-
-
-

 

-
- - \ No newline at end of file diff --git a/Drivers/BSP/Components/Common/accelero.h b/Drivers/BSP/Components/Common/accelero.h deleted file mode 100644 index 0de8232949..0000000000 --- a/Drivers/BSP/Components/Common/accelero.h +++ /dev/null @@ -1,143 +0,0 @@ -/** - ****************************************************************************** - * @file accelero.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the functions prototypes for the Accelerometer driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __ACCELERO_H -#define __ACCELERO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ACCELERO - * @{ - */ - -/** @defgroup ACCELERO_Exported_Types - * @{ - */ - -/** @defgroup ACCELERO_Driver_structure Accelerometer Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t); - void (*DeInit)(void); - uint8_t (*ReadID)(void); - void (*Reset)(void); - void (*LowPower)(void); - void (*ConfigIT)(void); - void (*EnableIT)(uint8_t); - void (*DisableIT)(uint8_t); - uint8_t (*ITStatus)(uint16_t); - void (*ClearIT)(void); - void (*FilterConfig)(uint8_t); - void (*FilterCmd)(uint8_t); - void (*GetXYZ)(int16_t *); -}ACCELERO_DrvTypeDef; -/** - * @} - */ - -/** @defgroup ACCELERO_Configuration_structure Accelerometer Configuration structure - * @{ - */ - -/* ACCELERO struct */ -typedef struct -{ - uint8_t Power_Mode; /* Power-down/Normal Mode */ - uint8_t AccOutput_DataRate; /* OUT data rate */ - uint8_t Axes_Enable; /* Axes enable */ - uint8_t High_Resolution; /* High Resolution enabling/disabling */ - uint8_t BlockData_Update; /* Block Data Update */ - uint8_t Endianness; /* Endian Data selection */ - uint8_t AccFull_Scale; /* Full Scale selection */ - uint8_t Communication_Mode; -}ACCELERO_InitTypeDef; - -/* ACCELERO High Pass Filter struct */ -typedef struct -{ - uint8_t HighPassFilter_Mode_Selection; /* Internal filter mode */ - uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */ - uint8_t HighPassFilter_AOI1; /* HPF_enabling/disabling for AOI function on interrupt 1 */ - uint8_t HighPassFilter_AOI2; /* HPF_enabling/disabling for AOI function on interrupt 2 */ - uint8_t HighPassFilter_Data_Sel; - uint8_t HighPassFilter_Stat; -}ACCELERO_FilterConfigTypeDef; - -/** - * @} - */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __ACCELERO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/audio.h b/Drivers/BSP/Components/Common/audio.h deleted file mode 100644 index 8b93673ff8..0000000000 --- a/Drivers/BSP/Components/Common/audio.h +++ /dev/null @@ -1,122 +0,0 @@ -/** - ****************************************************************************** - * @file audio.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the common defines and functions prototypes - * for the Audio driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AUDIO_H -#define __AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup AUDIO - * @{ - */ - -/** @defgroup AUDIO_Exported_Constants - * @{ - */ - -/* Codec audio Standards */ -#define CODEC_STANDARD 0x04 -#define I2S_STANDARD I2S_STANDARD_PHILIPS - -/** - * @} - */ - -/** @defgroup AUDIO_Exported_Types - * @{ - */ - -/** @defgroup AUDIO_Driver_structure Audio Driver structure - * @{ - */ -typedef struct -{ - uint32_t (*Init)(uint16_t, uint16_t, uint8_t, uint32_t); - void (*DeInit)(void); - uint32_t (*ReadID)(uint16_t); - uint32_t (*Play)(uint16_t, uint16_t*, uint16_t); - uint32_t (*Pause)(uint16_t); - uint32_t (*Resume)(uint16_t); - uint32_t (*Stop)(uint16_t, uint32_t); - uint32_t (*SetFrequency)(uint16_t, uint32_t); - uint32_t (*SetVolume)(uint16_t, uint8_t); - uint32_t (*SetMute)(uint16_t, uint32_t); - uint32_t (*SetOutputMode)(uint16_t, uint8_t); - uint32_t (*Reset)(uint16_t); -}AUDIO_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __AUDIO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/camera.h b/Drivers/BSP/Components/Common/camera.h deleted file mode 100644 index c64f32fdc1..0000000000 --- a/Drivers/BSP/Components/Common/camera.h +++ /dev/null @@ -1,141 +0,0 @@ -/** - ****************************************************************************** - * @file camera.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the common defines and functions prototypes - * for the camera driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __CAMERA_H -#define __CAMERA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup CAMERA - * @{ - */ - - -/** @defgroup CAMERA_Exported_Types - * @{ - */ - -/** @defgroup CAMERA_Driver_structure Camera Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t, uint32_t); - uint16_t (*ReadID)(uint16_t); - void (*Config)(uint16_t, uint32_t, uint32_t, uint32_t); -}CAMERA_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup CAMERA_Exported_Constants - * @{ - */ -#define CAMERA_R160x120 0x00 /* QQVGA Resolution */ -#define CAMERA_R320x240 0x01 /* QVGA Resolution */ -#define CAMERA_R480x272 0x02 /* 480x272 Resolution */ -#define CAMERA_R640x480 0x03 /* VGA Resolution */ - -#define CAMERA_CONTRAST_BRIGHTNESS 0x00 /* Camera contrast brightness features */ -#define CAMERA_BLACK_WHITE 0x01 /* Camera black white feature */ -#define CAMERA_COLOR_EFFECT 0x03 /* Camera color effect feature */ - -#define CAMERA_BRIGHTNESS_LEVEL0 0x00 /* Brightness level -2 */ -#define CAMERA_BRIGHTNESS_LEVEL1 0x01 /* Brightness level -1 */ -#define CAMERA_BRIGHTNESS_LEVEL2 0x02 /* Brightness level 0 */ -#define CAMERA_BRIGHTNESS_LEVEL3 0x03 /* Brightness level +1 */ -#define CAMERA_BRIGHTNESS_LEVEL4 0x04 /* Brightness level +2 */ - -#define CAMERA_CONTRAST_LEVEL0 0x05 /* Contrast level -2 */ -#define CAMERA_CONTRAST_LEVEL1 0x06 /* Contrast level -1 */ -#define CAMERA_CONTRAST_LEVEL2 0x07 /* Contrast level 0 */ -#define CAMERA_CONTRAST_LEVEL3 0x08 /* Contrast level +1 */ -#define CAMERA_CONTRAST_LEVEL4 0x09 /* Contrast level +2 */ - -#define CAMERA_BLACK_WHITE_BW 0x00 /* Black and white effect */ -#define CAMERA_BLACK_WHITE_NEGATIVE 0x01 /* Negative effect */ -#define CAMERA_BLACK_WHITE_BW_NEGATIVE 0x02 /* BW and Negative effect */ -#define CAMERA_BLACK_WHITE_NORMAL 0x03 /* Normal effect */ - -#define CAMERA_COLOR_EFFECT_NONE 0x00 /* No effects */ -#define CAMERA_COLOR_EFFECT_BLUE 0x01 /* Blue effect */ -#define CAMERA_COLOR_EFFECT_GREEN 0x02 /* Green effect */ -#define CAMERA_COLOR_EFFECT_RED 0x03 /* Red effect */ -#define CAMERA_COLOR_EFFECT_ANTIQUE 0x04 /* Antique effect */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __CAMERA_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/epd.h b/Drivers/BSP/Components/Common/epd.h deleted file mode 100644 index a06be10d55..0000000000 --- a/Drivers/BSP/Components/Common/epd.h +++ /dev/null @@ -1,115 +0,0 @@ -/** - ****************************************************************************** - * @file epd.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This file contains all the functions prototypes for the - * EPD (E Paper Display) driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __EPD_H -#define __EPD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup Common - * @{ - */ - -/** @addtogroup EPD - * @{ - */ - -/** @defgroup EPD_Exported_Types - * @{ - */ - -/** @defgroup EPD_Driver_structure E Paper Display Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(void); - void (*WritePixel)(uint8_t); - - /* Optimized operation */ - void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t); - void (*RefreshDisplay)(void); - void (*CloseChargePump)(void); - - uint16_t (*GetEpdPixelWidth)(void); - uint16_t (*GetEpdPixelHeight)(void); - void (*DrawImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*); -} -EPD_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* EPD_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/gyro.h b/Drivers/BSP/Components/Common/gyro.h deleted file mode 100644 index 462928c903..0000000000 --- a/Drivers/BSP/Components/Common/gyro.h +++ /dev/null @@ -1,145 +0,0 @@ -/** - ****************************************************************************** - * @file gyro.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the functions prototypes for the gyroscope driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __GYRO_H -#define __GYRO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup GYRO - * @{ - */ - -/** @defgroup GYRO_Exported_Types - * @{ - */ - -/** @defgroup GYRO_Driver_structure Gyroscope Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t); - void (*DeInit)(void); - uint8_t (*ReadID)(void); - void (*Reset)(void); - void (*LowPower)(uint16_t); - void (*ConfigIT)(uint16_t); - void (*EnableIT)(uint8_t); - void (*DisableIT)(uint8_t); - uint8_t (*ITStatus)(uint16_t, uint16_t); - void (*ClearIT)(uint16_t, uint16_t); - void (*FilterConfig)(uint8_t); - void (*FilterCmd)(uint8_t); - void (*GetXYZ)(float *); -}GYRO_DrvTypeDef; -/** - * @} - */ - -/** @defgroup GYRO_Config_structure Gyroscope Configuration structure - * @{ - */ - -typedef struct -{ - uint8_t Power_Mode; /* Power-down/Sleep/Normal Mode */ - uint8_t Output_DataRate; /* OUT data rate */ - uint8_t Axes_Enable; /* Axes enable */ - uint8_t Band_Width; /* Bandwidth selection */ - uint8_t BlockData_Update; /* Block Data Update */ - uint8_t Endianness; /* Endian Data selection */ - uint8_t Full_Scale; /* Full Scale selection */ -}GYRO_InitTypeDef; - -/* GYRO High Pass Filter struct */ -typedef struct -{ - uint8_t HighPassFilter_Mode_Selection; /* Internal filter mode */ - uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */ -}GYRO_FilterConfigTypeDef; - -/*GYRO Interrupt struct */ -typedef struct -{ - uint8_t Latch_Request; /* Latch interrupt request into CLICK_SRC register */ - uint8_t Interrupt_Axes; /* X, Y, Z Axes Interrupts */ - uint8_t Interrupt_ActiveEdge; /* Interrupt Active edge */ -}GYRO_InterruptConfigTypeDef; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __GYRO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/idd.h b/Drivers/BSP/Components/Common/idd.h deleted file mode 100644 index 1b8a762e39..0000000000 --- a/Drivers/BSP/Components/Common/idd.h +++ /dev/null @@ -1,168 +0,0 @@ -/** - ****************************************************************************** - * @file idd.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This file contains all the functions prototypes for the IDD driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __IDD_H -#define __IDD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup IDD - * @{ - */ - -/** @defgroup IDD_Exported_Types IDD Exported Types - * @{ - */ - -/** @defgroup IDD_Config_structure IDD Configuration structure - * @{ - */ -typedef struct -{ - uint16_t AmpliGain; /*!< Specifies ampli gain value - */ - uint16_t VddMin; /*!< Specifies minimum MCU VDD can reach to protect MCU from reset - */ - uint16_t Shunt0Value; /*!< Specifies value of Shunt 0 if existing - */ - uint16_t Shunt1Value; /*!< Specifies value of Shunt 1 if existing - */ - uint16_t Shunt2Value; /*!< Specifies value of Shunt 2 if existing - */ - uint16_t Shunt3Value; /*!< Specifies value of Shunt 3 if existing - */ - uint16_t Shunt4Value; /*!< Specifies value of Shunt 4 if existing - */ - uint16_t Shunt0StabDelay; /*!< Specifies delay of Shunt 0 stabilization if existing - */ - uint16_t Shunt1StabDelay; /*!< Specifies delay of Shunt 1 stabilization if existing - */ - uint16_t Shunt2StabDelay; /*!< Specifies delay of Shunt 2 stabilization if existing - */ - uint16_t Shunt3StabDelay; /*!< Specifies delay of Shunt 3 stabilization if existing - */ - uint16_t Shunt4StabDelay; /*!< Specifies delay of Shunt 4 stabilization if existing - */ - uint8_t ShuntNbOnBoard; /*!< Specifies number of shunts that are present on board - This parameter can be a value of @ref IDD_shunt_number */ - uint8_t ShuntNbUsed; /*!< Specifies number of shunts used for measurement - This parameter can be a value of @ref IDD_shunt_number */ - uint8_t VrefMeasurement; /*!< Specifies if Vref is automatically measured before each Idd measurement - This parameter can be a value of @ref IDD_Vref_Measurement */ - uint8_t Calibration; /*!< Specifies if calibration is done before each Idd measurement - */ - uint8_t PreDelayUnit; /*!< Specifies Pre delay unit - This parameter can be a value of @ref IDD_PreDelay */ - uint8_t PreDelayValue; /*!< Specifies Pre delay value in selected unit - */ - uint8_t MeasureNb; /*!< Specifies number of Measure to be performed - This parameter can be a value between 1 and 256 */ - uint8_t DeltaDelayUnit; /*!< Specifies Delta delay unit - This parameter can be a value of @ref IDD_DeltaDelay */ - uint8_t DeltaDelayValue; /*!< Specifies Delta delay between 2 measures - value can be between 1 and 128 */ -}IDD_ConfigTypeDef; -/** - * @} - */ - -/** @defgroup IDD_Driver_structure IDD Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t); - void (*DeInit)(uint16_t); - uint16_t (*ReadID)(uint16_t); - void (*Reset)(uint16_t); - void (*LowPower)(uint16_t); - void (*WakeUp)(uint16_t); - void (*Start)(uint16_t); - void (*Config)(uint16_t,IDD_ConfigTypeDef); - void (*GetValue)(uint16_t, uint32_t *); - void (*EnableIT)(uint16_t); - void (*ClearIT)(uint16_t); - uint8_t (*GetITStatus)(uint16_t); - void (*DisableIT)(uint16_t); - void (*ErrorEnableIT)(uint16_t); - void (*ErrorClearIT)(uint16_t); - uint8_t (*ErrorGetITStatus)(uint16_t); - void (*ErrorDisableIT)(uint16_t); - uint8_t (*ErrorGetSrc)(uint16_t); - uint8_t (*ErrorGetCode)(uint16_t); -}IDD_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __IDD_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/io.h b/Drivers/BSP/Components/Common/io.h deleted file mode 100644 index b33c00e669..0000000000 --- a/Drivers/BSP/Components/Common/io.h +++ /dev/null @@ -1,150 +0,0 @@ -/** - ****************************************************************************** - * @file io.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This file contains all the functions prototypes for the IO driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __IO_H -#define __IO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup IO - * @{ - */ - -/** @defgroup IO_Exported_Types - * @{ - */ - -/** - * @brief IO Bit SET and Bit RESET enumeration - */ -typedef enum -{ - IO_PIN_RESET = 0, - IO_PIN_SET -}IO_PinState; - -typedef enum -{ - IO_MODE_INPUT = 0, /* input floating */ - IO_MODE_OUTPUT, /* output Push Pull */ - IO_MODE_IT_RISING_EDGE, /* float input - irq detect on rising edge */ - IO_MODE_IT_FALLING_EDGE, /* float input - irq detect on falling edge */ - IO_MODE_IT_LOW_LEVEL, /* float input - irq detect on low level */ - IO_MODE_IT_HIGH_LEVEL, /* float input - irq detect on high level */ - /* following modes only available on MFX*/ - IO_MODE_ANALOG, /* analog mode */ - IO_MODE_OFF, /* when pin isn't used*/ - IO_MODE_INPUT_PU, /* input with internal pull up resistor */ - IO_MODE_INPUT_PD, /* input with internal pull down resistor */ - IO_MODE_OUTPUT_OD, /* Open Drain output without internal resistor */ - IO_MODE_OUTPUT_OD_PU, /* Open Drain output with internal pullup resistor */ - IO_MODE_OUTPUT_OD_PD, /* Open Drain output with internal pulldown resistor */ - IO_MODE_OUTPUT_PP, /* PushPull output without internal resistor */ - IO_MODE_OUTPUT_PP_PU, /* PushPull output with internal pullup resistor */ - IO_MODE_OUTPUT_PP_PD, /* PushPull output with internal pulldown resistor */ - IO_MODE_IT_RISING_EDGE_PU, /* push up resistor input - irq on rising edge */ - IO_MODE_IT_RISING_EDGE_PD, /* push dw resistor input - irq on rising edge */ - IO_MODE_IT_FALLING_EDGE_PU, /* push up resistor input - irq on falling edge */ - IO_MODE_IT_FALLING_EDGE_PD, /* push dw resistor input - irq on falling edge */ - IO_MODE_IT_LOW_LEVEL_PU, /* push up resistor input - irq detect on low level */ - IO_MODE_IT_LOW_LEVEL_PD, /* push dw resistor input - irq detect on low level */ - IO_MODE_IT_HIGH_LEVEL_PU, /* push up resistor input - irq detect on high level */ - IO_MODE_IT_HIGH_LEVEL_PD, /* push dw resistor input - irq detect on high level */ - -}IO_ModeTypedef; - -/** @defgroup IO_Driver_structure IO Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t); - uint16_t (*ReadID)(uint16_t); - void (*Reset)(uint16_t); - - void (*Start)(uint16_t, uint32_t); - uint8_t (*Config)(uint16_t, uint32_t, IO_ModeTypedef); - void (*WritePin)(uint16_t, uint32_t, uint8_t); - uint32_t (*ReadPin)(uint16_t, uint32_t); - - void (*EnableIT)(uint16_t); - void (*DisableIT)(uint16_t); - uint32_t (*ITStatus)(uint16_t, uint32_t); - void (*ClearIT)(uint16_t, uint32_t); - -}IO_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __IO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/lcd.h b/Drivers/BSP/Components/Common/lcd.h deleted file mode 100644 index 9ff398b4e9..0000000000 --- a/Drivers/BSP/Components/Common/lcd.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - ****************************************************************************** - * @file lcd.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This file contains all the functions prototypes for the LCD driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LCD_H -#define __LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LCD - * @{ - */ - -/** @defgroup LCD_Exported_Types - * @{ - */ - -/** @defgroup LCD_Driver_structure LCD Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(void); - uint16_t (*ReadID)(void); - void (*DisplayOn)(void); - void (*DisplayOff)(void); - void (*SetCursor)(uint16_t, uint16_t); - void (*WritePixel)(uint16_t, uint16_t, uint16_t); - uint16_t (*ReadPixel)(uint16_t, uint16_t); - - /* Optimized operation */ - void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t); - void (*DrawHLine)(uint16_t, uint16_t, uint16_t, uint16_t); - void (*DrawVLine)(uint16_t, uint16_t, uint16_t, uint16_t); - - uint16_t (*GetLcdPixelWidth)(void); - uint16_t (*GetLcdPixelHeight)(void); - void (*DrawBitmap)(uint16_t, uint16_t, uint8_t*); - void (*DrawRGBImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*); -}LCD_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LCD_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/magneto.h b/Drivers/BSP/Components/Common/magneto.h deleted file mode 100644 index dc27dd03ab..0000000000 --- a/Drivers/BSP/Components/Common/magneto.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - ****************************************************************************** - * @file magneto.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the functions prototypes for the MAGNETO driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAGNETO_H -#define __MAGNETO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup MAGNETO - * @{ - */ - -/** @defgroup MAGNETO_Exported_Types - * @{ - */ - -/** @defgroup MAGNETO_Config_structure Magnetometer Configuration structure - * @{ - */ -typedef struct -{ - uint8_t Register1; - uint8_t Register2; - uint8_t Register3; - uint8_t Register4; - uint8_t Register5; -}MAGNETO_InitTypeDef; -/** - * @} - */ - -/** @defgroup MAGNETO_Driver_structure Magnetometer Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(MAGNETO_InitTypeDef); - void (*DeInit)(void); - uint8_t (*ReadID)(void); - void (*Reset)(void); - void (*LowPower)(void); - void (*ConfigIT)(void); - void (*EnableIT)(uint8_t); - void (*DisableIT)(uint8_t); - uint8_t (*ITStatus)(uint16_t); - void (*ClearIT)(void); - void (*FilterConfig)(uint8_t); - void (*FilterCmd)(uint8_t); - void (*GetXYZ)(int16_t *); -}MAGNETO_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAGNETO_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/ts.h b/Drivers/BSP/Components/Common/ts.h deleted file mode 100644 index 73705964bd..0000000000 --- a/Drivers/BSP/Components/Common/ts.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - ****************************************************************************** - * @file ts.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This file contains all the functions prototypes for the Touch Screen driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __TS_H -#define __TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup TS - * @{ - */ - -/** @defgroup TS_Exported_Types - * @{ - */ - -/** @defgroup TS_Driver_structure Touch Sensor Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t); - uint16_t (*ReadID)(uint16_t); - void (*Reset)(uint16_t); - void (*Start)(uint16_t); - uint8_t (*DetectTouch)(uint16_t); - void (*GetXY)(uint16_t, uint16_t*, uint16_t*); - void (*EnableIT)(uint16_t); - void (*ClearIT)(uint16_t); - uint8_t (*GetITStatus)(uint16_t); - void (*DisableIT)(uint16_t); -}TS_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __TS_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/Common/tsensor.h b/Drivers/BSP/Components/Common/tsensor.h deleted file mode 100644 index 4ea0ffc217..0000000000 --- a/Drivers/BSP/Components/Common/tsensor.h +++ /dev/null @@ -1,118 +0,0 @@ -/** - ****************************************************************************** - * @file tsensor.h - * @author MCD Application Team - * @version V4.0.1 - * @date 21-July-2015 - * @brief This header file contains the functions prototypes for the - * Temperature Sensor driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __TSENSOR_H -#define __TSENSOR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup TSENSOR - * @{ - */ - -/** @defgroup TSENSOR_Exported_Types - * @{ - */ - -/** @defgroup TSENSOR_Config_structure Temperature Sensor Configuration structure - * @{ - */ -typedef struct -{ - uint8_t AlertMode; /* Alert Mode Temperature out of range*/ - uint8_t ConversionMode; /* Continuous/One Shot Mode */ - uint8_t ConversionResolution; /* Temperature Resolution */ - uint8_t ConversionRate; /* Number of measure per second */ - uint8_t TemperatureLimitHigh; /* High Temperature Limit Range */ - uint8_t TemperatureLimitLow; /* Low Temperature Limit Range */ -}TSENSOR_InitTypeDef; -/** - * @} - */ - -/** @defgroup TSENSOR_Driver_structure Temperature Sensor Driver structure - * @{ - */ -typedef struct -{ - void (*Init)(uint16_t, TSENSOR_InitTypeDef *); - uint8_t (*IsReady)(uint16_t, uint32_t); - uint8_t (*ReadStatus)(uint16_t); - uint16_t (*ReadTemp)(uint16_t); -}TSENSOR_DrvTypeDef; -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __TSENSOR_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Drivers/BSP/Components/ampire480272 b/Drivers/BSP/Components/ampire480272 new file mode 160000 index 0000000000..8576969c0d --- /dev/null +++ b/Drivers/BSP/Components/ampire480272 @@ -0,0 +1 @@ +Subproject commit 8576969c0d64fbcf37b1b7cfee241e01737a7973 diff --git a/Drivers/BSP/Components/ampire480272/LICENSE.md b/Drivers/BSP/Components/ampire480272/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ampire480272/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ampire480272/Release_Notes.html b/Drivers/BSP/Components/ampire480272/Release_Notes.html deleted file mode 100644 index 153d835f64..0000000000 --- a/Drivers/BSP/Components/ampire480272/Release_Notes.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - Release Notes for AMPIRE480272 Component Driver - - - - - - -
-
-
-

Release Notes for

-

AMPIRE480272 Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the AMPIRE480272 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update st_logo.png inclusion path in Release notes.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update Release_Notes generation sources
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of ampire480272 LCD component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ampire480272/_htmresc/favicon.png b/Drivers/BSP/Components/ampire480272/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ampire480272/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ampire480272/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ampire480272/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ampire480272/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ampire480272/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ampire480272/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ampire480272/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ampire480272/ampire480272.h b/Drivers/BSP/Components/ampire480272/ampire480272.h deleted file mode 100644 index 2b322580ad..0000000000 --- a/Drivers/BSP/Components/ampire480272/ampire480272.h +++ /dev/null @@ -1,100 +0,0 @@ -/** - ****************************************************************************** - * @file ampire480272.h - * @author MCD Application Team - * @brief This file contains all the constants parameters for the ampire480272 - * LCD component. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AMPIRE480272_H -#define __AMPIRE480272_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ampire480272 - * @{ - */ - -/** @defgroup AMPIRE480272_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup AMPIRE480272_Exported_Constants - * @{ - */ - -/** - * @brief AMPIRE480272 Size - */ -#define AMPIRE480272_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ -#define AMPIRE480272_HEIGHT ((uint16_t)272) /* LCD PIXEL HEIGHT */ - -/** - * @brief AMPIRE480272 Timing - */ -#define AMPIRE480272_HSYNC ((uint16_t)41) /* Horizontal synchronization */ -#define AMPIRE480272_HBP ((uint16_t)2) /* Horizontal back porch */ -#define AMPIRE480272_HFP ((uint16_t)2) /* Horizontal front porch */ -#define AMPIRE480272_VSYNC ((uint16_t)10) /* Vertical synchronization */ -#define AMPIRE480272_VBP ((uint16_t)2) /* Vertical back porch */ -#define AMPIRE480272_VFP ((uint16_t)2) /* Vertical front porch */ - -/** - * @brief AMPIRE480272 frequency divider - */ -#define AMPIRE480272_FREQUENCY_DIVIDER 5 /* LCD Frequency divider */ -/** - * @} - */ - -/** @defgroup AMPIRE480272_Exported_Functions - * @{ - */ - -/** - * @} - */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __AMPIRE480272_H */ diff --git a/Drivers/BSP/Components/ampire640480 b/Drivers/BSP/Components/ampire640480 new file mode 160000 index 0000000000..8817bf6945 --- /dev/null +++ b/Drivers/BSP/Components/ampire640480 @@ -0,0 +1 @@ +Subproject commit 8817bf69457657873ba23f6dd9ffb52a1e47929a diff --git a/Drivers/BSP/Components/ampire640480/LICENSE.md b/Drivers/BSP/Components/ampire640480/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ampire640480/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ampire640480/Release_Notes.html b/Drivers/BSP/Components/ampire640480/Release_Notes.html deleted file mode 100644 index 3c69e33c73..0000000000 --- a/Drivers/BSP/Components/ampire640480/Release_Notes.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - Release Notes for Ampire640480 LCD Component Driver - - - - - - -
-
-
-

Release Notes for

-

Ampire640480 LCD Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the Ampire640480 LCD Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update st_logo.png inclusion path in Release notes.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update Release_Notes generation sources
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of ampire640480 LCD component
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ampire640480/_htmresc/favicon.png b/Drivers/BSP/Components/ampire640480/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ampire640480/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ampire640480/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ampire640480/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ampire640480/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ampire640480/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ampire640480/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ampire640480/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ampire640480/ampire640480.h b/Drivers/BSP/Components/ampire640480/ampire640480.h deleted file mode 100644 index 4634f2cccf..0000000000 --- a/Drivers/BSP/Components/ampire640480/ampire640480.h +++ /dev/null @@ -1,100 +0,0 @@ -/** - ****************************************************************************** - * @file ampire640480.h - * @author MCD Application Team - * @brief This file contains all the constants parameters for the ampire640480 - * LCD component. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __AMPIRE640480_H -#define __AMPIRE640480_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ampire640480 - * @{ - */ - -/** @defgroup AMPIRE640480_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup AMPIRE640480_Exported_Constants - * @{ - */ - -/** - * @brief AMPIRE640480 Size - */ -#define AMPIRE640480_WIDTH ((uint16_t)640) /* LCD PIXEL WIDTH */ -#define AMPIRE640480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */ - -/** - * @brief AMPIRE640480 Timing - */ -#define AMPIRE640480_HSYNC ((uint16_t)30) /* Horizontal synchronization */ -#define AMPIRE640480_HBP ((uint16_t)114) /* Horizontal back porch */ -#define AMPIRE640480_HFP ((uint16_t)16) /* Horizontal front porch */ -#define AMPIRE640480_VSYNC ((uint16_t)3) /* Vertical synchronization */ -#define AMPIRE640480_VBP ((uint16_t)32) /* Vertical back porch */ -#define AMPIRE640480_VFP ((uint16_t)10) /* Vertical front porch */ - -/** - * @brief AMPIRE640480 frequency divider - */ -#define AMPIRE640480_FREQUENCY_DIVIDER 3 /* LCD Frequency divider */ -/** - * @} - */ - -/** @defgroup AMPIRE640480_Exported_Functions - * @{ - */ - -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __AMPIRE640480_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/cs43l22 b/Drivers/BSP/Components/cs43l22 new file mode 160000 index 0000000000..5d4f2cbd22 --- /dev/null +++ b/Drivers/BSP/Components/cs43l22 @@ -0,0 +1 @@ +Subproject commit 5d4f2cbd223a3fdd76a222e64fa81ec379abc444 diff --git a/Drivers/BSP/Components/cs43l22/LICENSE.md b/Drivers/BSP/Components/cs43l22/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/cs43l22/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/cs43l22/Release_Notes.html b/Drivers/BSP/Components/cs43l22/Release_Notes.html deleted file mode 100644 index d3e9766626..0000000000 --- a/Drivers/BSP/Components/cs43l22/Release_Notes.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - Release Notes for CS43L22 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

CS43L22 Component Drivers

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the CS43L22 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • cs43l22.c/.h: -
      -
    • Move VOLUME_CONVERT macro from cs43l22.h to cs43l22.c as internally used to convert volume.
    • -
    • Add literals instead of magic number for cs34l22 registers
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • cs43l22.c: -
      -
    • Enable the digital soft ramp to avoid clac noise
    • -
    • Improve mute/unmute by muting/unmuting also the DAC inputs
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • cs43l22.c/.h: -
      -
    • Add codec de-initialization function: cs43l22_DeInit()
    • -
    • Add Audio IO de-initialization function prototype: AUDIO_IO_DeInit()
    • -
  • -
-

NOTE
-This release must be used with BSP Common driver V4.0.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • cs43l22.c/.h: -
      -
    • Add AUDIO_FREQUENCY_xxx defines for frequencies capabilities (8K to 192K)
    • -
    • Add codec reset function: cs43l22_Reset()
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • cs43l22.c: change “\†by “/†in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of CS43L22 audio codec
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/cs43l22/_htmresc/favicon.png b/Drivers/BSP/Components/cs43l22/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/cs43l22/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/cs43l22/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/cs43l22/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/cs43l22/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/cs43l22/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/cs43l22/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/cs43l22/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/cs43l22/cs43l22.c b/Drivers/BSP/Components/cs43l22/cs43l22.c deleted file mode 100644 index 54806ceeee..0000000000 --- a/Drivers/BSP/Components/cs43l22/cs43l22.c +++ /dev/null @@ -1,474 +0,0 @@ -/** - ****************************************************************************** - * @file cs43l22.c - * @author MCD Application Team - * @brief This file provides the CS43L22 Audio Codec driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "cs43l22.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup CS43L22 - * @brief This file provides a set of functions needed to drive the - * CS43L22 audio codec. - * @{ - */ - -/** @defgroup CS43L22_Private_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup CS43L22_Private_Defines - * @{ - */ -#define VOLUME_CONVERT(Volume) (((Volume) > 100)? 255:((uint8_t)(((Volume) * 255) / 100))) -/* Uncomment this line to enable verifying data sent to codec after each write - operation (for debug purpose) */ -#if !defined (VERIFY_WRITTENDATA) -/* #define VERIFY_WRITTENDATA */ -#endif /* VERIFY_WRITTENDATA */ -/** - * @} - */ - -/** @defgroup CS43L22_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup CS43L22_Private_Variables - * @{ - */ - -/* Audio codec driver structure initialization */ -AUDIO_DrvTypeDef cs43l22_drv = -{ - cs43l22_Init, - cs43l22_DeInit, - cs43l22_ReadID, - - cs43l22_Play, - cs43l22_Pause, - cs43l22_Resume, - cs43l22_Stop, - - cs43l22_SetFrequency, - cs43l22_SetVolume, - cs43l22_SetMute, - cs43l22_SetOutputMode, - cs43l22_Reset, -}; - -static uint8_t Is_cs43l22_Stop = 1; - -volatile uint8_t OutputDev = 0; - -/** - * @} - */ - -/** @defgroup CS43L22_Function_Prototypes - * @{ - */ -static uint8_t CODEC_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -/** - * @} - */ - -/** @defgroup CS43L22_Private_Functions - * @{ - */ - -/** - * @brief Initializes the audio codec and the control interface. - * @param DeviceAddr: Device address on communication Bus. - * @param OutputDevice: can be OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint32_t counter = 0; - - /* Initialize the Control interface of the Audio Codec */ - AUDIO_IO_Init(); - - /* Keep Codec powered OFF */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x01); - - /*Save Output device for mute ON/OFF procedure*/ - switch (OutputDevice) - { - case OUTPUT_DEVICE_SPEAKER: - OutputDev = 0xFA; - break; - - case OUTPUT_DEVICE_HEADPHONE: - OutputDev = 0xAF; - break; - - case OUTPUT_DEVICE_BOTH: - OutputDev = 0xAA; - break; - - case OUTPUT_DEVICE_AUTO: - OutputDev = 0x05; - break; - - default: - OutputDev = 0x05; - break; - } - - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); - - /* Clock configuration: Auto detection */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_CLOCKING_CTL, 0x81); - - /* Set the Slave Mode and the audio Standard */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_INTERFACE_CTL1, CODEC_STANDARD); - - /* Set the Master volume */ - counter += cs43l22_SetVolume(DeviceAddr, Volume); - - /* If the Speaker is enabled, set the Mono mode and volume attenuation level */ - if(OutputDevice != OUTPUT_DEVICE_HEADPHONE) - { - /* Set the Speaker Mono mode */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PLAYBACK_CTL2, 0x06); - - /* Set the Speaker attenuation level */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_SPEAKER_A_VOL, 0x00); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_SPEAKER_B_VOL, 0x00); - } - - /* Additional configuration for the CODEC. These configurations are done to reduce - the time needed for the Codec to power off. If these configurations are removed, - then a long delay should be added between powering off the Codec and switching - off the I2S peripheral MCLK clock (which is the operating clock for Codec). - If this delay is not inserted, then the codec will not shut down properly and - it results in high noise after shut down. */ - - /* Disable the analog soft ramp */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_ANALOG_ZC_SR_SETT, 0x00); - /* Disable the digital soft ramp */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x04); - /* Disable the limiter attack level */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_LIMIT_CTL1, 0x00); - /* Adjust Bass and Treble levels */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_TONE_CTL, 0x0F); - /* Adjust PCM volume level */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PCMA_VOL, 0x0A); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_PCMB_VOL, 0x0A); - - /* Return communication control value */ - return counter; -} - -/** - * @brief Deinitializes the audio codec. - * @param None - * @retval None - */ -void cs43l22_DeInit(void) -{ - /* Deinitialize Audio Codec interface */ - AUDIO_IO_DeInit(); -} - -/** - * @brief Get the CS43L22 ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The CS43L22 ID - */ -uint32_t cs43l22_ReadID(uint16_t DeviceAddr) -{ - uint8_t Value; - /* Initialize the Control interface of the Audio Codec */ - AUDIO_IO_Init(); - - Value = AUDIO_IO_Read(DeviceAddr, CS43L22_CHIPID_ADDR); - Value = (Value & CS43L22_ID_MASK); - - return((uint32_t) Value); -} - -/** - * @brief Start the audio Codec play feature. - * @note For this codec no Play options are required. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size) -{ - uint32_t counter = 0; - - if(Is_cs43l22_Stop == 1) - { - /* Enable the digital soft ramp */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x06); - - /* Enable Output device */ - counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - /* Power on the Codec */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9E); - Is_cs43l22_Stop = 0; - } - - /* Return communication control value */ - return counter; -} - -/** - * @brief Pauses playing on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Pause(uint16_t DeviceAddr) -{ - uint32_t counter = 0; - - /* Pause the audio file playing */ - /* Mute the output first */ - counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_ON); - - /* Put the Codec in Power save mode */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x01); - - return counter; -} - -/** - * @brief Resumes playing on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Resume(uint16_t DeviceAddr) -{ - uint32_t counter = 0; - volatile uint32_t index = 0x00; - /* Resumes the audio file playing */ - /* Unmute the output first */ - counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - for(index = 0x00; index < 0xFF; index++); - - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); - - /* Exit the Power save mode */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9E); - - return counter; -} - -/** - * @brief Stops audio Codec playing. It powers down the codec. - * @param DeviceAddr: Device address on communication Bus. - * @param CodecPdwnMode: selects the power down mode. - * - CODEC_PDWN_HW: Physically power down the codec. When resuming from this - * mode, the codec is set to default configuration - * (user should re-Initialize the codec in order to - * play again the audio stream). - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Stop(uint16_t DeviceAddr, uint32_t CodecPdwnMode) -{ - uint32_t counter = 0; - - /* Mute the output first */ - counter += cs43l22_SetMute(DeviceAddr, AUDIO_MUTE_ON); - - /* Disable the digital soft ramp */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MISC_CTL, 0x04); - - /* Power down the DAC and the speaker (PMDAC and PMSPK bits)*/ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL1, 0x9F); - - Is_cs43l22_Stop = 1; - return counter; -} - -/** - * @brief Sets higher or lower the codec volume level. - * @param DeviceAddr: Device address on communication Bus. - * @param Volume: a byte value from 0 to 255 (refer to codec registers - * description for more details). - * - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_SetVolume(uint16_t DeviceAddr, uint8_t Volume) -{ - uint32_t counter = 0; - uint8_t convertedvol = VOLUME_CONVERT(Volume); - - if(convertedvol > 0xE6) - { - /* Set the Master volume */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_A_VOL, convertedvol - 0xE7); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_B_VOL, convertedvol - 0xE7); - } - else - { - /* Set the Master volume */ - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_A_VOL, convertedvol + 0x19); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_MASTER_B_VOL, convertedvol + 0x19); - } - - return counter; -} - -/** - * @brief Sets new frequency. - * @param DeviceAddr: Device address on communication Bus. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq) -{ - return 0; -} - -/** - * @brief Enables or disables the mute feature on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the - * mute mode. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_SetMute(uint16_t DeviceAddr, uint32_t Cmd) -{ - uint32_t counter = 0; - - /* Set the Mute mode */ - if(Cmd == AUDIO_MUTE_ON) - { - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xFF); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_A_VOL, 0x01); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_B_VOL, 0x01); - } - else /* AUDIO_MUTE_OFF Disable the Mute */ - { - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_A_VOL, 0x00); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_HEADPHONE_B_VOL, 0x00); - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, OutputDev); - } - return counter; -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @note This function modifies a global variable of the audio codec driver: OutputDev. - * @param DeviceAddr: Device address on communication Bus. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_SetOutputMode(uint16_t DeviceAddr, uint8_t Output) -{ - uint32_t counter = 0; - - switch (Output) - { - case OUTPUT_DEVICE_SPEAKER: - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xFA); /* SPK always ON & HP always OFF */ - OutputDev = 0xFA; - break; - - case OUTPUT_DEVICE_HEADPHONE: - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xAF); /* SPK always OFF & HP always ON */ - OutputDev = 0xAF; - break; - - case OUTPUT_DEVICE_BOTH: - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0xAA); /* SPK always ON & HP always ON */ - OutputDev = 0xAA; - break; - - case OUTPUT_DEVICE_AUTO: - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0x05); /* Detect the HP or the SPK automatically */ - OutputDev = 0x05; - break; - - default: - counter += CODEC_IO_Write(DeviceAddr, CS43L22_REG_POWER_CTL2, 0x05); /* Detect the HP or the SPK automatically */ - OutputDev = 0x05; - break; - } - return counter; -} - -/** - * @brief Resets cs43l22 registers. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t cs43l22_Reset(uint16_t DeviceAddr) -{ - return 0; -} - -/** - * @brief Writes/Read a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - * @retval None - */ -static uint8_t CODEC_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - uint32_t result = 0; - - AUDIO_IO_Write(Addr, Reg, Value); - -#ifdef VERIFY_WRITTENDATA - /* Verify that the data has been correctly written */ - result = (AUDIO_IO_Read(Addr, Reg) == Value)? 0:1; -#endif /* VERIFY_WRITTENDATA */ - - return result; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/cs43l22/cs43l22.h b/Drivers/BSP/Components/cs43l22/cs43l22.h deleted file mode 100644 index 55e1e08974..0000000000 --- a/Drivers/BSP/Components/cs43l22/cs43l22.h +++ /dev/null @@ -1,207 +0,0 @@ -/** - ****************************************************************************** - * @file cs43l22.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the cs43l22.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __CS43L22_H -#define __CS43L22_H - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @addtogroup CS43L22 - * @{ - */ - -/** @defgroup CS43L22_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup CS43L22_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/*************************** Codec User defines ******************************/ -/******************************************************************************/ -/* Codec output DEVICE */ -#define OUTPUT_DEVICE_SPEAKER 1 -#define OUTPUT_DEVICE_HEADPHONE 2 -#define OUTPUT_DEVICE_BOTH 3 -#define OUTPUT_DEVICE_AUTO 4 - -/* Volume Levels values */ -#define DEFAULT_VOLMIN 0x00 -#define DEFAULT_VOLMAX 0xFF -#define DEFAULT_VOLSTEP 0x04 - -#define AUDIO_PAUSE 0 -#define AUDIO_RESUME 1 - -/* Codec POWER DOWN modes */ -#define CODEC_PDWN_HW 1 -#define CODEC_PDWN_SW 2 - -/* MUTE commands */ -#define AUDIO_MUTE_ON 1 -#define AUDIO_MUTE_OFF 0 - -/* AUDIO FREQUENCY */ -#define AUDIO_FREQUENCY_192K ((uint32_t)192000) -#define AUDIO_FREQUENCY_96K ((uint32_t)96000) -#define AUDIO_FREQUENCY_48K ((uint32_t)48000) -#define AUDIO_FREQUENCY_44K ((uint32_t)44100) -#define AUDIO_FREQUENCY_32K ((uint32_t)32000) -#define AUDIO_FREQUENCY_22K ((uint32_t)22050) -#define AUDIO_FREQUENCY_16K ((uint32_t)16000) -#define AUDIO_FREQUENCY_11K ((uint32_t)11025) -#define AUDIO_FREQUENCY_8K ((uint32_t)8000) - -/** CS43l22 Registers ***/ -#define CS43L22_REG_ID 0x01 -#define CS43L22_REG_POWER_CTL1 0x02 -#define CS43L22_REG_POWER_CTL2 0x04 -#define CS43L22_REG_CLOCKING_CTL 0x05 -#define CS43L22_REG_INTERFACE_CTL1 0x06 -#define CS43L22_REG_INTERFACE_CTL2 0x07 -#define CS43L22_REG_PASSTHR_A_SELECT 0x08 -#define CS43L22_REG_PASSTHR_B_SELECT 0x09 -#define CS43L22_REG_ANALOG_ZC_SR_SETT 0x0A -#define CS43L22_REG_PASSTHR_GANG_CTL 0x0C -#define CS43L22_REG_PLAYBACK_CTL1 0x0D -#define CS43L22_REG_MISC_CTL 0x0E -#define CS43L22_REG_PLAYBACK_CTL2 0x0F -#define CS43L22_REG_PASSTHR_A_VOL 0x14 -#define CS43L22_REG_PASSTHR_B_VOL 0x15 -#define CS43L22_REG_PCMA_VOL 0x1A -#define CS43L22_REG_PCMB_VOL 0x1B -#define CS43L22_REG_BEEP_FREQ_ON_TIME 0x1C -#define CS43L22_REG_BEEP_VOL_OFF_TIME 0x1D -#define CS43L22_REG_BEEP_TONE_CFG 0x1E -#define CS43L22_REG_TONE_CTL 0x1F -#define CS43L22_REG_MASTER_A_VOL 0x20 -#define CS43L22_REG_MASTER_B_VOL 0x21 -#define CS43L22_REG_HEADPHONE_A_VOL 0x22 -#define CS43L22_REG_HEADPHONE_B_VOL 0x23 -#define CS43L22_REG_SPEAKER_A_VOL 0x24 -#define CS43L22_REG_SPEAKER_B_VOL 0x25 -#define CS43L22_REG_CH_MIXER_SWAP 0x26 -#define CS43L22_REG_LIMIT_CTL1 0x27 -#define CS43L22_REG_LIMIT_CTL2 0x28 -#define CS43L22_REG_LIMIT_ATTACK_RATE 0x29 -#define CS43L22_REG_OVF_CLK_STATUS 0x2E -#define CS43L22_REG_BATT_COMPENSATION 0x2F -#define CS43L22_REG_VP_BATTERY_LEVEL 0x30 -#define CS43L22_REG_SPEAKER_STATUS 0x31 -#define CS43L22_REG_TEMPMONITOR_CTL 0x32 -#define CS43L22_REG_THERMAL_FOLDBACK 0x33 -#define CS43L22_REG_CHARGE_PUMP_FREQ 0x34 - -/******************************************************************************/ -/****************************** REGISTER MAPPING ******************************/ -/******************************************************************************/ -/** - * @brief CS43L22 ID - */ -#define CS43L22_ID 0xE0 -#define CS43L22_ID_MASK 0xF8 -/** - * @brief Chip ID Register: Chip I.D. and Revision Register - * Read only register - * Default value: 0x01 - * [7:3] CHIPID[4:0]: I.D. code for the CS43L22. - * Default value: 11100b - * [2:0] REVID[2:0]: CS43L22 revision level. - * Default value: - * 000 - Rev A0 - * 001 - Rev A1 - * 010 - Rev B0 - * 011 - Rev B1 - */ -#define CS43L22_CHIPID_ADDR 0x01 - -/** - * @} - */ - -/** @defgroup CS43L22_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup CS43L22_Exported_Functions - * @{ - */ - -/*------------------------------------------------------------------------------ - Audio Codec functions -------------------------------------------------------------------------------*/ -/* High Layer codec functions */ -uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -void cs43l22_DeInit(void); -uint32_t cs43l22_ReadID(uint16_t DeviceAddr); -uint32_t cs43l22_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size); -uint32_t cs43l22_Pause(uint16_t DeviceAddr); -uint32_t cs43l22_Resume(uint16_t DeviceAddr); -uint32_t cs43l22_Stop(uint16_t DeviceAddr, uint32_t Cmd); -uint32_t cs43l22_SetVolume(uint16_t DeviceAddr, uint8_t Volume); -uint32_t cs43l22_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq); -uint32_t cs43l22_SetMute(uint16_t DeviceAddr, uint32_t Cmd); -uint32_t cs43l22_SetOutputMode(uint16_t DeviceAddr, uint8_t Output); -uint32_t cs43l22_Reset(uint16_t DeviceAddr); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg); - -/* Audio driver structure */ -extern AUDIO_DrvTypeDef cs43l22_drv; - -#endif /* __CS43L22_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/dp83848 b/Drivers/BSP/Components/dp83848 new file mode 160000 index 0000000000..530efe3fb8 --- /dev/null +++ b/Drivers/BSP/Components/dp83848 @@ -0,0 +1 @@ +Subproject commit 530efe3fb8f71a8776e2c0ebc0270fc342fb78fa diff --git a/Drivers/BSP/Components/dp83848/LICENSE.md b/Drivers/BSP/Components/dp83848/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/dp83848/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/dp83848/Release_Notes.html b/Drivers/BSP/Components/dp83848/Release_Notes.html deleted file mode 100644 index 19a04261e6..0000000000 --- a/Drivers/BSP/Components/dp83848/Release_Notes.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - Release Notes for DP83848 Component Driver - - - - - - -
-
-
-

Release Notes for

-

DP83848 Component Driver

-

Copyright © 2021 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the DP83848 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
  • Update DP83848_PHYSCSR_AUTONEGO_DONE bit definition to be aligned with component DataSheet
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/dp83848/_htmresc/Add button.svg b/Drivers/BSP/Components/dp83848/_htmresc/Add button.svg deleted file mode 100644 index c211545dad..0000000000 --- a/Drivers/BSP/Components/dp83848/_htmresc/Add button.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Drivers/BSP/Components/dp83848/_htmresc/Update.svg b/Drivers/BSP/Components/dp83848/_htmresc/Update.svg deleted file mode 100644 index f88381f1e6..0000000000 --- a/Drivers/BSP/Components/dp83848/_htmresc/Update.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Drivers/BSP/Components/dp83848/_htmresc/favicon.png b/Drivers/BSP/Components/dp83848/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/dp83848/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/dp83848/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/dp83848/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/dp83848/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/dp83848/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/dp83848/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/dp83848/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/dp83848/dp83848.c b/Drivers/BSP/Components/dp83848/dp83848.c deleted file mode 100644 index a90d5dcdf6..0000000000 --- a/Drivers/BSP/Components/dp83848/dp83848.c +++ /dev/null @@ -1,662 +0,0 @@ -/** - ****************************************************************************** - * @file dp83848.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the DP83848 - * PHY devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2021 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "dp83848.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup DP83848 DP83848 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/** @defgroup DP83848_Private_Defines DP83848 Private Defines - * @{ - */ -#define DP83848_SW_RESET_TO ((uint32_t)500U) -#define DP83848_INIT_TO ((uint32_t)2000U) -#define DP83848_MAX_DEV_ADDR ((uint32_t)31U) -/** - * @} - */ - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -/** @defgroup DP83848_Private_Functions DP83848 Private Functions - * @{ - */ - -/** - * @brief Register IO functions to component object - * @param pObj: device object of DP83848_Object_t. - * @param ioctx: holds device IO functions. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_ERROR if missing mandatory function - */ -int32_t DP83848_RegisterBusIO(dp83848_Object_t *pObj, dp83848_IOCtx_t *ioctx) -{ - if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) - { - return DP83848_STATUS_ERROR; - } - - pObj->IO.Init = ioctx->Init; - pObj->IO.DeInit = ioctx->DeInit; - pObj->IO.ReadReg = ioctx->ReadReg; - pObj->IO.WriteReg = ioctx->WriteReg; - pObj->IO.GetTick = ioctx->GetTick; - - return DP83848_STATUS_OK; -} - -/** - * @brief Initialize the DP83848 and configure the needed hardware resources - * @param pObj: device object DP83848_Object_t. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_ADDRESS_ERROR if cannot find device address - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - * DP83848_STATUS_RESET_TIMEOUT if cannot perform a software reset - */ - int32_t DP83848_Init(dp83848_Object_t *pObj) - { - uint32_t tickstart = 0, regvalue = 0, addr = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->Is_Initialized == 0) - { - if(pObj->IO.Init != 0) - { - /* GPIO and Clocks initialization */ - pObj->IO.Init(); - } - - /* for later check */ - pObj->DevAddr = DP83848_MAX_DEV_ADDR + 1; - - /* Get the device address from special mode register */ - for(addr = 0; addr <= DP83848_MAX_DEV_ADDR; addr ++) - { - if(pObj->IO.ReadReg(addr, DP83848_SMR, ®value) < 0) - { - status = DP83848_STATUS_READ_ERROR; - /* Can't read from this device address - continue with next address */ - continue; - } - - if((regvalue & DP83848_SMR_PHY_ADDR) == addr) - { - pObj->DevAddr = addr; - status = DP83848_STATUS_OK; - break; - } - } - - if(pObj->DevAddr > DP83848_MAX_DEV_ADDR) - { - status = DP83848_STATUS_ADDRESS_ERROR; - } - - /* if device address is matched */ - if(status == DP83848_STATUS_OK) - { - /* set a software reset */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, DP83848_BCR_SOFT_RESET) >= 0) - { - /* get software reset status */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, ®value) >= 0) - { - tickstart = pObj->IO.GetTick(); - - /* wait until software reset is done or timeout occured */ - while(regvalue & DP83848_BCR_SOFT_RESET) - { - if((pObj->IO.GetTick() - tickstart) <= DP83848_SW_RESET_TO) - { - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, ®value) < 0) - { - status = DP83848_STATUS_READ_ERROR; - break; - } - } - else - { - status = DP83848_STATUS_RESET_TIMEOUT; - break; - } - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - } - else - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - } - - if(status == DP83848_STATUS_OK) - { - tickstart = pObj->IO.GetTick(); - - /* Wait for 2s to perform initialization */ - while((pObj->IO.GetTick() - tickstart) <= DP83848_INIT_TO) - { - } - pObj->Is_Initialized = 1; - } - - return status; - } - -/** - * @brief De-Initialize the dp83848 and it's hardware resources - * @param pObj: device object DP83848_Object_t. - * @retval None - */ -int32_t DP83848_DeInit(dp83848_Object_t *pObj) -{ - if(pObj->Is_Initialized) - { - if(pObj->IO.DeInit != 0) - { - if(pObj->IO.DeInit() < 0) - { - return DP83848_STATUS_ERROR; - } - } - - pObj->Is_Initialized = 0; - } - - return DP83848_STATUS_OK; -} - -/** - * @brief Disable the DP83848 power down mode. - * @param pObj: device object DP83848_Object_t. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_DisablePowerDownMode(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) >= 0) - { - readval &= ~DP83848_BCR_POWER_DOWN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Enable the DP83848 power down mode. - * @param pObj: device object DP83848_Object_t. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_EnablePowerDownMode(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) >= 0) - { - readval |= DP83848_BCR_POWER_DOWN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Start the auto negotiation process. - * @param pObj: device object DP83848_Object_t. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_StartAutoNego(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) >= 0) - { - readval |= DP83848_BCR_AUTONEGO_EN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Get the link state of DP83848 device. - * @param pObj: Pointer to device object. - * @param pLinkState: Pointer to link state - * @retval DP83848_STATUS_LINK_DOWN if link is down - * DP83848_STATUS_AUTONEGO_NOTDONE if Auto nego not completed - * DP83848_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD - * DP83848_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD - * DP83848_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD - * DP83848_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_GetLinkState(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - - /* Read Status register */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BSR, &readval) < 0) - { - return DP83848_STATUS_READ_ERROR; - } - - /* Read Status register again */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BSR, &readval) < 0) - { - return DP83848_STATUS_READ_ERROR; - } - - if((readval & DP83848_BSR_LINK_STATUS) == 0) - { - /* Return Link Down status */ - return DP83848_STATUS_LINK_DOWN; - } - - /* Check Auto negotiaition */ - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) < 0) - { - return DP83848_STATUS_READ_ERROR; - } - - if((readval & DP83848_BCR_AUTONEGO_EN) != DP83848_BCR_AUTONEGO_EN) - { - if(((readval & DP83848_BCR_SPEED_SELECT) == DP83848_BCR_SPEED_SELECT) && ((readval & DP83848_BCR_DUPLEX_MODE) == DP83848_BCR_DUPLEX_MODE)) - { - return DP83848_STATUS_100MBITS_FULLDUPLEX; - } - else if ((readval & DP83848_BCR_SPEED_SELECT) == DP83848_BCR_SPEED_SELECT) - { - return DP83848_STATUS_100MBITS_HALFDUPLEX; - } - else if ((readval & DP83848_BCR_DUPLEX_MODE) == DP83848_BCR_DUPLEX_MODE) - { - return DP83848_STATUS_10MBITS_FULLDUPLEX; - } - else - { - return DP83848_STATUS_10MBITS_HALFDUPLEX; - } - } - else /* Auto Nego enabled */ - { - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_PHYSCSR, &readval) < 0) - { - return DP83848_STATUS_READ_ERROR; - } - - /* Check if auto nego not done */ - if((readval & DP83848_PHYSCSR_AUTONEGO_DONE) == 0) - { - return DP83848_STATUS_AUTONEGO_NOTDONE; - } - - if((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_100BTX_FD) - { - return DP83848_STATUS_100MBITS_FULLDUPLEX; - } - else if ((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_100BTX_HD) - { - return DP83848_STATUS_100MBITS_HALFDUPLEX; - } - else if ((readval & DP83848_PHYSCSR_HCDSPEEDMASK) == DP83848_PHYSCSR_10BT_FD) - { - return DP83848_STATUS_10MBITS_FULLDUPLEX; - } - else - { - return DP83848_STATUS_10MBITS_HALFDUPLEX; - } - } -} - -/** - * @brief Set the link state of DP83848 device. - * @param pObj: Pointer to device object. - * @param pLinkState: link state can be one of the following - * DP83848_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD - * DP83848_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD - * DP83848_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD - * DP83848_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_ERROR if parameter error - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_SetLinkState(dp83848_Object_t *pObj, uint32_t LinkState) -{ - uint32_t bcrvalue = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &bcrvalue) >= 0) - { - /* Disable link config (Auto nego, speed and duplex) */ - bcrvalue &= ~(DP83848_BCR_AUTONEGO_EN | DP83848_BCR_SPEED_SELECT | DP83848_BCR_DUPLEX_MODE); - - if(LinkState == DP83848_STATUS_100MBITS_FULLDUPLEX) - { - bcrvalue |= (DP83848_BCR_SPEED_SELECT | DP83848_BCR_DUPLEX_MODE); - } - else if (LinkState == DP83848_STATUS_100MBITS_HALFDUPLEX) - { - bcrvalue |= DP83848_BCR_SPEED_SELECT; - } - else if (LinkState == DP83848_STATUS_10MBITS_FULLDUPLEX) - { - bcrvalue |= DP83848_BCR_DUPLEX_MODE; - } - else - { - /* Wrong link status parameter */ - status = DP83848_STATUS_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - if(status == DP83848_STATUS_OK) - { - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, bcrvalue) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - - return status; -} - -/** - * @brief Enable loopback mode. - * @param pObj: Pointer to device object. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_EnableLoopbackMode(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) >= 0) - { - readval |= DP83848_BCR_LOOPBACK; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Disable loopback mode. - * @param pObj: Pointer to device object. - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_DisableLoopbackMode(dp83848_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_BCR, &readval) >= 0) - { - readval &= ~DP83848_BCR_LOOPBACK; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_BCR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Enable IT source. - * @param pObj: Pointer to device object. - * @param Interrupt: IT source to be enabled - * should be a value or a combination of the following: - * DP83848_WOL_IT - * DP83848_ENERGYON_IT - * DP83848_AUTONEGO_COMPLETE_IT - * DP83848_REMOTE_FAULT_IT - * DP83848_LINK_DOWN_IT - * DP83848_AUTONEGO_LP_ACK_IT - * DP83848_PARALLEL_DETECTION_FAULT_IT - * DP83848_AUTONEGO_PAGE_RECEIVED_IT - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_EnableIT(dp83848_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_IMR, &readval) >= 0) - { - readval |= Interrupt; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_IMR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Disable IT source. - * @param pObj: Pointer to device object. - * @param Interrupt: IT source to be disabled - * should be a value or a combination of the following: - * DP83848_WOL_IT - * DP83848_ENERGYON_IT - * DP83848_AUTONEGO_COMPLETE_IT - * DP83848_REMOTE_FAULT_IT - * DP83848_LINK_DOWN_IT - * DP83848_AUTONEGO_LP_ACK_IT - * DP83848_PARALLEL_DETECTION_FAULT_IT - * DP83848_AUTONEGO_PAGE_RECEIVED_IT - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - * DP83848_STATUS_WRITE_ERROR if connot write to register - */ -int32_t DP83848_DisableIT(dp83848_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_IMR, &readval) >= 0) - { - readval &= ~Interrupt; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, DP83848_IMR, readval) < 0) - { - status = DP83848_STATUS_WRITE_ERROR; - } - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Clear IT flag. - * @param pObj: Pointer to device object. - * @param Interrupt: IT flag to be cleared - * should be a value or a combination of the following: - * DP83848_WOL_IT - * DP83848_ENERGYON_IT - * DP83848_AUTONEGO_COMPLETE_IT - * DP83848_REMOTE_FAULT_IT - * DP83848_LINK_DOWN_IT - * DP83848_AUTONEGO_LP_ACK_IT - * DP83848_PARALLEL_DETECTION_FAULT_IT - * DP83848_AUTONEGO_PAGE_RECEIVED_IT - * @retval DP83848_STATUS_OK if OK - * DP83848_STATUS_READ_ERROR if connot read register - */ -int32_t DP83848_ClearIT(dp83848_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = DP83848_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_ISFR, &readval) < 0) - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Get IT Flag status. - * @param pObj: Pointer to device object. - * @param Interrupt: IT Flag to be checked, - * should be a value or a combination of the following: - * DP83848_WOL_IT - * DP83848_ENERGYON_IT - * DP83848_AUTONEGO_COMPLETE_IT - * DP83848_REMOTE_FAULT_IT - * DP83848_LINK_DOWN_IT - * DP83848_AUTONEGO_LP_ACK_IT - * DP83848_PARALLEL_DETECTION_FAULT_IT - * DP83848_AUTONEGO_PAGE_RECEIVED_IT - * @retval 1 IT flag is SET - * 0 IT flag is RESET - * DP83848_STATUS_READ_ERROR if connot read register - */ -int32_t DP83848_GetITStatus(dp83848_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = 0; - - if(pObj->IO.ReadReg(pObj->DevAddr, DP83848_ISFR, &readval) >= 0) - { - status = ((readval & Interrupt) == Interrupt); - } - else - { - status = DP83848_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/dp83848/dp83848.h b/Drivers/BSP/Components/dp83848/dp83848.h deleted file mode 100644 index 5b937d874d..0000000000 --- a/Drivers/BSP/Components/dp83848/dp83848.h +++ /dev/null @@ -1,434 +0,0 @@ -/** - ****************************************************************************** - * @file dp83848.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * dp83848.c PHY driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2021 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef DP83848_H -#define DP83848_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup DP83848 - * @{ - */ -/* Exported constants --------------------------------------------------------*/ -/** @defgroup DP83848_Exported_Constants DP83848 Exported Constants - * @{ - */ - -/** @defgroup DP83848_Registers_Mapping DP83848 Registers Mapping - * @{ - */ -#define DP83848_BCR ((uint16_t)0x0000U) -#define DP83848_BSR ((uint16_t)0x0001U) -#define DP83848_PHYI1R ((uint16_t)0x0002U) -#define DP83848_PHYI2R ((uint16_t)0x0003U) -#define DP83848_ANAR ((uint16_t)0x0004U) -#define DP83848_ANLPAR ((uint16_t)0x0005U) -#define DP83848_ANER ((uint16_t)0x0006U) -#define DP83848_ANNPTR ((uint16_t)0x0007U) -#define DP83848_SMR ((uint16_t)0x0019U) -#define DP83848_ISFR ((uint16_t)0x0012U) -#define DP83848_IMR ((uint16_t)0x0011U) -#define DP83848_PHYSCSR ((uint16_t)0x0010U) -/** - * @} - */ - -/** @defgroup DP83848_BCR_Bit_Definition DP83848 BCR Bit Definition - * @{ - */ -#define DP83848_BCR_SOFT_RESET ((uint16_t)0x8000U) -#define DP83848_BCR_LOOPBACK ((uint16_t)0x4000U) -#define DP83848_BCR_SPEED_SELECT ((uint16_t)0x2000U) -#define DP83848_BCR_AUTONEGO_EN ((uint16_t)0x1000U) -#define DP83848_BCR_POWER_DOWN ((uint16_t)0x0800U) -#define DP83848_BCR_ISOLATE ((uint16_t)0x0400U) -#define DP83848_BCR_RESTART_AUTONEGO ((uint16_t)0x0200U) -#define DP83848_BCR_DUPLEX_MODE ((uint16_t)0x0100U) -/** - * @} - */ - -/** @defgroup DP83848_BSR_Bit_Definition DP83848 BSR Bit Definition - * @{ - */ -#define DP83848_BSR_100BASE_T4 ((uint16_t)0x8000U) -#define DP83848_BSR_100BASE_TX_FD ((uint16_t)0x4000U) -#define DP83848_BSR_100BASE_TX_HD ((uint16_t)0x2000U) -#define DP83848_BSR_10BASE_T_FD ((uint16_t)0x1000U) -#define DP83848_BSR_10BASE_T_HD ((uint16_t)0x0800U) -#define DP83848_BSR_MF_PREAMBLE ((uint16_t)0x0040U) -#define DP83848_BSR_AUTONEGO_CPLT ((uint16_t)0x0020U) -#define DP83848_BSR_REMOTE_FAULT ((uint16_t)0x0010U) -#define DP83848_BSR_AUTONEGO_ABILITY ((uint16_t)0x0008U) -#define DP83848_BSR_LINK_STATUS ((uint16_t)0x0004U) -#define DP83848_BSR_JABBER_DETECT ((uint16_t)0x0002U) -#define DP83848_BSR_EXTENDED_CAP ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup DP83848_PHYI1R_Bit_Definition DP83848 PHYI1R Bit Definition - * @{ - */ -#define DP83848_PHYI1R_OUI_3_18 ((uint16_t)0xFFFFU) -/** - * @} - */ - -/** @defgroup DP83848_PHYI2R_Bit_Definition DP83848 PHYI2R Bit Definition - * @{ - */ -#define DP83848_PHYI2R_OUI_19_24 ((uint16_t)0xFC00U) -#define DP83848_PHYI2R_MODEL_NBR ((uint16_t)0x03F0U) -#define DP83848_PHYI2R_REVISION_NBR ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup DP83848_ANAR_Bit_Definition DP83848 ANAR Bit Definition - * @{ - */ -#define DP83848_ANAR_NEXT_PAGE ((uint16_t)0x8000U) -#define DP83848_ANAR_REMOTE_FAULT ((uint16_t)0x2000U) -#define DP83848_ANAR_PAUSE_OPERATION ((uint16_t)0x0C00U) -#define DP83848_ANAR_PO_NOPAUSE ((uint16_t)0x0000U) -#define DP83848_ANAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) -#define DP83848_ANAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) -#define DP83848_ANAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) -#define DP83848_ANAR_100BASE_TX_FD ((uint16_t)0x0100U) -#define DP83848_ANAR_100BASE_TX ((uint16_t)0x0080U) -#define DP83848_ANAR_10BASE_T_FD ((uint16_t)0x0040U) -#define DP83848_ANAR_10BASE_T ((uint16_t)0x0020U) -#define DP83848_ANAR_SELECTOR_FIELD ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup DP83848_ANLPAR_Bit_Definition DP83848 ANLPAR Bit Definition - * @{ - */ -#define DP83848_ANLPAR_NEXT_PAGE ((uint16_t)0x8000U) -#define DP83848_ANLPAR_REMOTE_FAULT ((uint16_t)0x2000U) -#define DP83848_ANLPAR_PAUSE_OPERATION ((uint16_t)0x0C00U) -#define DP83848_ANLPAR_PO_NOPAUSE ((uint16_t)0x0000U) -#define DP83848_ANLPAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) -#define DP83848_ANLPAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) -#define DP83848_ANLPAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) -#define DP83848_ANLPAR_100BASE_TX_FD ((uint16_t)0x0100U) -#define DP83848_ANLPAR_100BASE_TX ((uint16_t)0x0080U) -#define DP83848_ANLPAR_10BASE_T_FD ((uint16_t)0x0040U) -#define DP83848_ANLPAR_10BASE_T ((uint16_t)0x0020U) -#define DP83848_ANLPAR_SELECTOR_FIELD ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup DP83848_ANER_Bit_Definition DP83848 ANER Bit Definition - * @{ - */ -#define DP83848_ANER_RX_NP_LOCATION_ABLE ((uint16_t)0x0040U) -#define DP83848_ANER_RX_NP_STORAGE_LOCATION ((uint16_t)0x0020U) -#define DP83848_ANER_PARALLEL_DETECT_FAULT ((uint16_t)0x0010U) -#define DP83848_ANER_LP_NP_ABLE ((uint16_t)0x0008U) -#define DP83848_ANER_NP_ABLE ((uint16_t)0x0004U) -#define DP83848_ANER_PAGE_RECEIVED ((uint16_t)0x0002U) -#define DP83848_ANER_LP_AUTONEG_ABLE ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup DP83848_ANNPTR_Bit_Definition DP83848 ANNPTR Bit Definition - * @{ - */ -#define DP83848_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U) -#define DP83848_ANNPTR_MESSAGE_PAGE ((uint16_t)0x2000U) -#define DP83848_ANNPTR_ACK2 ((uint16_t)0x1000U) -#define DP83848_ANNPTR_TOGGLE ((uint16_t)0x0800U) -#define DP83848_ANNPTR_MESSAGE_CODE ((uint16_t)0x07FFU) -/** - * @} - */ - -/** @defgroup DP83848_ANNPRR_Bit_Definition DP83848 ANNPRR Bit Definition - * @{ - */ -#define DP83848_ANNPRR_NEXT_PAGE ((uint16_t)0x8000U) -#define DP83848_ANNPRR_ACK ((uint16_t)0x4000U) -#define DP83848_ANNPRR_MESSAGE_PAGE ((uint16_t)0x2000U) -#define DP83848_ANNPRR_ACK2 ((uint16_t)0x1000U) -#define DP83848_ANNPRR_TOGGLE ((uint16_t)0x0800U) -#define DP83848_ANNPRR_MESSAGE_CODE ((uint16_t)0x07FFU) -/** - * @} - */ - -/** @defgroup DP83848_MMDACR_Bit_Definition DP83848 MMDACR Bit Definition - * @{ - */ -#define DP83848_MMDACR_MMD_FUNCTION ((uint16_t)0xC000U) -#define DP83848_MMDACR_MMD_FUNCTION_ADDR ((uint16_t)0x0000U) -#define DP83848_MMDACR_MMD_FUNCTION_DATA ((uint16_t)0x4000U) -#define DP83848_MMDACR_MMD_DEV_ADDR ((uint16_t)0x001FU) -/** - * @} - */ - -/** @defgroup DP83848_ENCTR_Bit_Definition DP83848 ENCTR Bit Definition - * @{ - */ -#define DP83848_ENCTR_TX_ENABLE ((uint16_t)0x8000U) -#define DP83848_ENCTR_TX_TIMER ((uint16_t)0x6000U) -#define DP83848_ENCTR_TX_TIMER_1S ((uint16_t)0x0000U) -#define DP83848_ENCTR_TX_TIMER_768MS ((uint16_t)0x2000U) -#define DP83848_ENCTR_TX_TIMER_512MS ((uint16_t)0x4000U) -#define DP83848_ENCTR_TX_TIMER_265MS ((uint16_t)0x6000U) -#define DP83848_ENCTR_RX_ENABLE ((uint16_t)0x1000U) -#define DP83848_ENCTR_RX_MAX_INTERVAL ((uint16_t)0x0C00U) -#define DP83848_ENCTR_RX_MAX_INTERVAL_64MS ((uint16_t)0x0000U) -#define DP83848_ENCTR_RX_MAX_INTERVAL_256MS ((uint16_t)0x0400U) -#define DP83848_ENCTR_RX_MAX_INTERVAL_512MS ((uint16_t)0x0800U) -#define DP83848_ENCTR_RX_MAX_INTERVAL_1S ((uint16_t)0x0C00U) -#define DP83848_ENCTR_EX_CROSS_OVER ((uint16_t)0x0002U) -#define DP83848_ENCTR_EX_MANUAL_CROSS_OVER ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup DP83848_MCSR_Bit_Definition DP83848 MCSR Bit Definition - * @{ - */ -#define DP83848_MCSR_EDPWRDOWN ((uint16_t)0x2000U) -#define DP83848_MCSR_FARLOOPBACK ((uint16_t)0x0200U) -#define DP83848_MCSR_ALTINT ((uint16_t)0x0040U) -#define DP83848_MCSR_ENERGYON ((uint16_t)0x0002U) -/** - * @} - */ - -/** @defgroup DP83848_SMR_Bit_Definition DP83848 SMR Bit Definition - * @{ - */ -#define DP83848_SMR_MODE ((uint16_t)0x00E0U) -#define DP83848_SMR_PHY_ADDR ((uint16_t)0x001FU) -/** - * @} - */ - -/** @defgroup DP83848_TPDCR_Bit_Definition DP83848 TPDCR Bit Definition - * @{ - */ -#define DP83848_TPDCR_DELAY_IN ((uint16_t)0x8000U) -#define DP83848_TPDCR_LINE_BREAK_COUNTER ((uint16_t)0x7000U) -#define DP83848_TPDCR_PATTERN_HIGH ((uint16_t)0x0FC0U) -#define DP83848_TPDCR_PATTERN_LOW ((uint16_t)0x003FU) -/** - * @} - */ - -/** @defgroup DP83848_TCSR_Bit_Definition DP83848 TCSR Bit Definition - * @{ - */ -#define DP83848_TCSR_TDR_ENABLE ((uint16_t)0x8000U) -#define DP83848_TCSR_TDR_AD_FILTER_ENABLE ((uint16_t)0x4000U) -#define DP83848_TCSR_TDR_CH_CABLE_TYPE ((uint16_t)0x0600U) -#define DP83848_TCSR_TDR_CH_CABLE_DEFAULT ((uint16_t)0x0000U) -#define DP83848_TCSR_TDR_CH_CABLE_SHORTED ((uint16_t)0x0200U) -#define DP83848_TCSR_TDR_CH_CABLE_OPEN ((uint16_t)0x0400U) -#define DP83848_TCSR_TDR_CH_CABLE_MATCH ((uint16_t)0x0600U) -#define DP83848_TCSR_TDR_CH_STATUS ((uint16_t)0x0100U) -#define DP83848_TCSR_TDR_CH_LENGTH ((uint16_t)0x00FFU) -/** - * @} - */ - -/** @defgroup DP83848_SCSIR_Bit_Definition DP83848 SCSIR Bit Definition - * @{ - */ -#define DP83848_SCSIR_AUTO_MDIX_ENABLE ((uint16_t)0x8000U) -#define DP83848_SCSIR_CHANNEL_SELECT ((uint16_t)0x2000U) -#define DP83848_SCSIR_SQE_DISABLE ((uint16_t)0x0800U) -#define DP83848_SCSIR_XPOLALITY ((uint16_t)0x0010U) -/** - * @} - */ - -/** @defgroup DP83848_CLR_Bit_Definition DP83848 CLR Bit Definition - * @{ - */ -#define DP83848_CLR_CABLE_LENGTH ((uint16_t)0xF000U) -/** - * @} - */ - -/** @defgroup DP83848_IMR_ISFR_Bit_Definition DP83848 IMR ISFR Bit Definition - * @{ - */ -#define DP83848_INT_8 ((uint16_t)0x0100U) -#define DP83848_INT_7 ((uint16_t)0x0080U) -#define DP83848_INT_6 ((uint16_t)0x0040U) -#define DP83848_INT_5 ((uint16_t)0x0020U) -#define DP83848_INT_4 ((uint16_t)0x0010U) -#define DP83848_INT_3 ((uint16_t)0x0008U) -#define DP83848_INT_2 ((uint16_t)0x0004U) -#define DP83848_INT_1 ((uint16_t)0x0002U) -/** - * @} - */ - -/** @defgroup DP83848_PHYSCSR_Bit_Definition DP83848 PHYSCSR Bit Definition - * @{ - */ -#define DP83848_PHYSCSR_AUTONEGO_DONE ((uint16_t)0x010U) -#define DP83848_PHYSCSR_HCDSPEEDMASK ((uint16_t)0x006U) -#define DP83848_PHYSCSR_10BT_HD ((uint16_t)0x002U) -#define DP83848_PHYSCSR_10BT_FD ((uint16_t)0x006U) -#define DP83848_PHYSCSR_100BTX_HD ((uint16_t)0x000U) -#define DP83848_PHYSCSR_100BTX_FD ((uint16_t)0x004U) -/** - * @} - */ - -/** @defgroup DP83848_Status DP83848 Status - * @{ - */ - -#define DP83848_STATUS_READ_ERROR ((int32_t)-5) -#define DP83848_STATUS_WRITE_ERROR ((int32_t)-4) -#define DP83848_STATUS_ADDRESS_ERROR ((int32_t)-3) -#define DP83848_STATUS_RESET_TIMEOUT ((int32_t)-2) -#define DP83848_STATUS_ERROR ((int32_t)-1) -#define DP83848_STATUS_OK ((int32_t) 0) -#define DP83848_STATUS_LINK_DOWN ((int32_t) 1) -#define DP83848_STATUS_100MBITS_FULLDUPLEX ((int32_t) 2) -#define DP83848_STATUS_100MBITS_HALFDUPLEX ((int32_t) 3) -#define DP83848_STATUS_10MBITS_FULLDUPLEX ((int32_t) 4) -#define DP83848_STATUS_10MBITS_HALFDUPLEX ((int32_t) 5) -#define DP83848_STATUS_AUTONEGO_NOTDONE ((int32_t) 6) -/** - * @} - */ - -/** @defgroup DP83848_IT_Flags DP83848 IT Flags - * @{ - */ -#define DP83848_WOL_IT DP83848_INT_8 -#define DP83848_ENERGYON_IT DP83848_INT_7 -#define DP83848_AUTONEGO_COMPLETE_IT DP83848_INT_6 -#define DP83848_REMOTE_FAULT_IT DP83848_INT_5 -#define DP83848_LINK_DOWN_IT DP83848_INT_4 -#define DP83848_AUTONEGO_LP_ACK_IT DP83848_INT_3 -#define DP83848_PARALLEL_DETECTION_FAULT_IT DP83848_INT_2 -#define DP83848_AUTONEGO_PAGE_RECEIVED_IT DP83848_INT_1 -/** - * @} - */ - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup DP83848_Exported_Types DP83848 Exported Types - * @{ - */ -typedef int32_t (*dp83848_Init_Func) (void); -typedef int32_t (*dp83848_DeInit_Func) (void); -typedef int32_t (*dp83848_ReadReg_Func) (uint32_t, uint32_t, uint32_t *); -typedef int32_t (*dp83848_WriteReg_Func) (uint32_t, uint32_t, uint32_t); -typedef int32_t (*dp83848_GetTick_Func) (void); - -typedef struct -{ - dp83848_Init_Func Init; - dp83848_DeInit_Func DeInit; - dp83848_WriteReg_Func WriteReg; - dp83848_ReadReg_Func ReadReg; - dp83848_GetTick_Func GetTick; -} dp83848_IOCtx_t; - - -typedef struct -{ - uint32_t DevAddr; - uint32_t Is_Initialized; - dp83848_IOCtx_t IO; - void *pData; -}dp83848_Object_t; -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -/** @defgroup DP83848_Exported_Functions DP83848 Exported Functions - * @{ - */ -int32_t DP83848_RegisterBusIO(dp83848_Object_t *pObj, dp83848_IOCtx_t *ioctx); -int32_t DP83848_Init(dp83848_Object_t *pObj); -int32_t DP83848_DeInit(dp83848_Object_t *pObj); -int32_t DP83848_DisablePowerDownMode(dp83848_Object_t *pObj); -int32_t DP83848_EnablePowerDownMode(dp83848_Object_t *pObj); -int32_t DP83848_StartAutoNego(dp83848_Object_t *pObj); -int32_t DP83848_GetLinkState(dp83848_Object_t *pObj); -int32_t DP83848_SetLinkState(dp83848_Object_t *pObj, uint32_t LinkState); -int32_t DP83848_EnableLoopbackMode(dp83848_Object_t *pObj); -int32_t DP83848_DisableLoopbackMode(dp83848_Object_t *pObj); -int32_t DP83848_EnableIT(dp83848_Object_t *pObj, uint32_t Interrupt); -int32_t DP83848_DisableIT(dp83848_Object_t *pObj, uint32_t Interrupt); -int32_t DP83848_ClearIT(dp83848_Object_t *pObj, uint32_t Interrupt); -int32_t DP83848_GetITStatus(dp83848_Object_t *pObj, uint32_t Interrupt); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif -#endif /* DP83848_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/exc7200 b/Drivers/BSP/Components/exc7200 new file mode 160000 index 0000000000..00d55b2b8d --- /dev/null +++ b/Drivers/BSP/Components/exc7200 @@ -0,0 +1 @@ +Subproject commit 00d55b2b8df08eb90a9f4cc1ee5a1391459863f2 diff --git a/Drivers/BSP/Components/exc7200/LICENSE.md b/Drivers/BSP/Components/exc7200/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/exc7200/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/exc7200/Release_Notes.html b/Drivers/BSP/Components/exc7200/Release_Notes.html deleted file mode 100644 index 4dcbc2a7b3..0000000000 --- a/Drivers/BSP/Components/exc7200/Release_Notes.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - Release Notes for EXC7200 Component Driver - - - - - - -
-
-
-

Release Notes for

-

EXC7200 Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the EXC7200 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • exc7200.c: -
      -
    • Update the I2C slave read address within exc7200_TS_DetectTouch() function.
    • -
    • Update exc7200_TS_GetXY() function to return correct Touch Screen positions.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of EXC7200 TS component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/exc7200/_htmresc/favicon.png b/Drivers/BSP/Components/exc7200/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/exc7200/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/exc7200/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/exc7200/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/exc7200/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/exc7200/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/exc7200/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/exc7200/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/exc7200/exc7200.c b/Drivers/BSP/Components/exc7200/exc7200.c deleted file mode 100644 index b7ec34add4..0000000000 --- a/Drivers/BSP/Components/exc7200/exc7200.c +++ /dev/null @@ -1,222 +0,0 @@ -/** - ****************************************************************************** - * @file exc7200.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the EXC7200 - * Touch-screen controller. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "exc7200.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup EXC7200 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup EXC7200_Private_Types_Definitions - * @{ - */ - -/* Private define ------------------------------------------------------------*/ - -/** @defgroup EXC7200_Private_Defines - * @{ - */ - -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup EXC7200_Private_Macros - * @{ - */ - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup EXC7200_Private_Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef exc7200_ts_drv = -{ - exc7200_Init, - exc7200_ReadID, - exc7200_Reset, - - exc7200_TS_Start, - exc7200_TS_DetectTouch, - exc7200_TS_GetXY, - - exc7200_TS_EnableIT, - exc7200_TS_ClearIT, - exc7200_TS_ITStatus, - exc7200_TS_DisableIT, -}; - -uint8_t aBufferTS[10]; - -/** - * @} - */ - -/* Private function prototypes -----------------------------------------------*/ - -/** @defgroup exc7200_Private_Function_Prototypes - * @{ - */ - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup exc7200_Private_Functions - * @{ - */ - -/** - * @brief Initialize the exc7200 and configure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void exc7200_Init(uint16_t DeviceAddr) -{ - /* Initialize IO BUS layer */ - IOE_Init(); - -} - -/** - * @brief Reset the exc7200 by Software. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void exc7200_Reset(uint16_t DeviceAddr) -{ - -} - -/** - * @brief Read the exc7200 IO Expander device ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device ID (two bytes). - */ -uint16_t exc7200_ReadID(uint16_t DeviceAddr) -{ - return 0; -} - -/** - * @brief Configures the touch Screen Controller (Single point detection) - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void exc7200_TS_Start(uint16_t DeviceAddr) -{ -} - -/** - * @brief Return if there is touch detected or not. - * @param DeviceAddr: Device address on communication Bus. - * @retval Touch detected state. - */ -uint8_t exc7200_TS_DetectTouch(uint16_t DeviceAddr) -{ - /* Read TS data : Send I2C Slave address + 1 Bit0=1 for:read */ - IOE_ReadMultiple(DeviceAddr | 1, EXC7200_READ_CMD, aBufferTS, 10); - - /* check for first byte */ - if (aBufferTS[1]==0x83) - { - return 1; - } - - return 0; -} - -/** - * @brief Get the touch screen X and Y positions values - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void exc7200_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - /* Calculate positions */ - *X = (((aBufferTS[3]&0x00ff) << 4) | ((aBufferTS[2]&0x00f0) >> 4)) << 1; - *Y = (((aBufferTS[5]&0x00ff) << 4) | ((aBufferTS[4]&0x00f0) >> 4)) << 1; - - /* Dummy Read to deactivate read mode */ - IOE_ReadMultiple(DeviceAddr, EXC7200_READ_CMD, aBufferTS, 10); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void exc7200_TS_EnableIT(uint16_t DeviceAddr) -{ -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void exc7200_TS_DisableIT(uint16_t DeviceAddr) -{ -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval TS interrupts status - */ -uint8_t exc7200_TS_ITStatus(uint16_t DeviceAddr) -{ - return 0; -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void exc7200_TS_ClearIT(uint16_t DeviceAddr) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/exc7200/exc7200.h b/Drivers/BSP/Components/exc7200/exc7200.h deleted file mode 100644 index 94d8a28c26..0000000000 --- a/Drivers/BSP/Components/exc7200/exc7200.h +++ /dev/null @@ -1,117 +0,0 @@ -/** - ****************************************************************************** - * @file exc7200.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * exc7200.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __EXC7200_H -#define __EXC7200_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup EXC7200 - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** @defgroup EXC7200_Exported_Types - * @{ - */ - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup EXC7200_Exported_Constants - * @{ - */ - -/* */ -#define EXC7200_READ_CMD 0x09 - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup exc7200_Exported_Macros - * @{ - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup exc7200_Exported_Functions - * @{ - */ - -/** - * @brief exc7200 Control functions - */ -void exc7200_Init(uint16_t DeviceAddr); -void exc7200_Reset(uint16_t DeviceAddr); -uint16_t exc7200_ReadID(uint16_t DeviceAddr); -void exc7200_TS_Start(uint16_t DeviceAddr); -uint8_t exc7200_TS_DetectTouch(uint16_t DeviceAddr); -void exc7200_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); -void exc7200_TS_EnableIT(uint16_t DeviceAddr); -void exc7200_TS_DisableIT(uint16_t DeviceAddr); -uint8_t exc7200_TS_ITStatus (uint16_t DeviceAddr); -void exc7200_TS_ClearIT (uint16_t DeviceAddr); - -void IOE_Init(void); -void IOE_Delay(uint32_t delay); -uint8_t IOE_Read(uint8_t addr, uint8_t reg); -uint16_t IOE_ReadMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); -void IOE_WriteMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); - -/* Touch screen driver structure */ -extern TS_DrvTypeDef exc7200_ts_drv; - -#ifdef __cplusplus -} -#endif -#endif /* __EXC7200_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ft3x67 b/Drivers/BSP/Components/ft3x67 new file mode 160000 index 0000000000..ce5660fa4e --- /dev/null +++ b/Drivers/BSP/Components/ft3x67 @@ -0,0 +1 @@ +Subproject commit ce5660fa4e8ef07ea093cd620bb75c2b6c9be1db diff --git a/Drivers/BSP/Components/ft3x67/LICENSE.md b/Drivers/BSP/Components/ft3x67/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ft3x67/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ft3x67/Release_Notes.html b/Drivers/BSP/Components/ft3x67/Release_Notes.html deleted file mode 100644 index 254e596a7f..0000000000 --- a/Drivers/BSP/Components/ft3x67/Release_Notes.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Release Notes for FT3X67 Component Drivers - - - - - - -
-
-
-

Release Notes for FT3X67 Component Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the FT3X67 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of Touch Screen FT3x67 Component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ft3x67/_htmresc/favicon.png b/Drivers/BSP/Components/ft3x67/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ft3x67/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ft3x67/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ft3x67/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ft3x67/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ft3x67/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ft3x67/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ft3x67/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ft3x67/ft3x67.c b/Drivers/BSP/Components/ft3x67/ft3x67.c deleted file mode 100644 index cdb3efee58..0000000000 --- a/Drivers/BSP/Components/ft3x67/ft3x67.c +++ /dev/null @@ -1,439 +0,0 @@ -/** - ****************************************************************************** - * @file ft3x67.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the FT3X67 - * touch screen devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ft3x67.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @addtogroup FT3X67 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup FT3X67_Private_Types_Definitions - * @{ - */ - -/* ft3x67 Handle definition. */ -typedef struct -{ - uint8_t i2cInitialized; - - /* field holding the current number of simultaneous active touches */ - uint8_t currActiveTouchNb; - - /* field holding the touch index currently managed */ - uint8_t currActiveTouchIdx; - -} ft3x67_handle_TypeDef; - -/** - * @} - */ - -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup FT3X67_Private_Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef ft3x67_ts_drv = -{ - ft3x67_Init, - ft3x67_ReadID, - ft3x67_Reset, - ft3x67_TS_Start, - ft3x67_TS_DetectTouch, - ft3x67_TS_GetXY, - ft3x67_TS_EnableIT, - ft3x67_TS_ClearIT, - ft3x67_TS_ITStatus, - ft3x67_TS_DisableIT -}; - -/* Global ft3x67 handle */ -static ft3x67_handle_TypeDef ft3x67_handle = { FT3X67_I2C_NOT_INITIALIZED, 0U, 0U}; - -/** - * @} - */ - -/* Private functions prototypes-----------------------------------------------*/ - -/** @defgroup FT3X67_Private_Functions - * @{ - */ - -static uint8_t ft3x67_Get_I2C_InitializedStatus(void); -static void ft3x67_I2C_InitializeIfRequired(void); -static uint32_t ft3x67_TS_Configure(uint16_t DeviceAddr); - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @addtogroup FT3X67_Exported_Functions - * @{ - */ - -/** - * @brief Initialize the ft3x67 communication bus - * from MCU to FT3X67 : ie I2C channel initialization (if required). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @retval None - */ -void ft3x67_Init(uint16_t DeviceAddr) -{ - /* Initialize I2C link if needed */ - ft3x67_I2C_InitializeIfRequired(); -} - -/** - * @brief Software Reset the ft3x67. - * @note : Not applicable to FT3X67. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @retval None - */ -void ft3x67_Reset(uint16_t DeviceAddr) -{ - /* Do nothing */ - /* No software reset sequence available in FT3X67 IC */ -} - -/** - * @brief Read the ft3x67 device ID, pre initialize I2C in case of need to be - * able to read the FT3X67 device ID, and verify this is a FT3X67. - * @param DeviceAddr: I2C FT3X67 Slave address. - * @retval The Device ID (two bytes). - */ -uint16_t ft3x67_ReadID(uint16_t DeviceAddr) -{ - /* Initialize I2C link if needed */ - ft3x67_I2C_InitializeIfRequired(); - - /* Return the device ID value */ - return(TS_IO_Read(DeviceAddr, FT3X67_CHIP_ID_REG)); -} - -/** - * @brief Configures the touch Screen IC device to start detecting touches - * @param DeviceAddr: Device address on communication Bus (I2C slave address). - * @retval None. - */ -void ft3x67_TS_Start(uint16_t DeviceAddr) -{ - /* Minimum static configuration of FT3X67 */ - ft3x67_TS_Configure(DeviceAddr); - - /* By default set FT3X67 IC in Polling mode : no INT generation on FT3X67 for new touch available */ - /* Note TS_INT is active low */ - ft3x67_TS_DisableIT(DeviceAddr); -} - -/** - * @brief Return if there is touches detected or not. - * Try to detect new touches and forget the old ones (reset internal global - * variables). - * @param DeviceAddr: Device address on communication Bus. - * @retval : Number of active touches detected (can be 0, 1 or 2). - */ -uint8_t ft3x67_TS_DetectTouch(uint16_t DeviceAddr) -{ - volatile uint8_t nbTouch = 0U; - - /* Read register FT3X67_TD_STAT_REG to check number of touches detection */ - nbTouch = TS_IO_Read(DeviceAddr, FT3X67_TD_STAT_REG); - nbTouch &= FT3X67_TD_STAT_MASK; - - if(nbTouch > FT3X67_MAX_DETECTABLE_TOUCH) - { - /* If invalid number of touch detected, set it to zero */ - nbTouch = 0U; - } - - /* Update ft3x67 driver internal global : current number of active touches */ - ft3x67_handle.currActiveTouchNb = nbTouch; - - /* Reset current active touch index on which to work on */ - ft3x67_handle.currActiveTouchIdx = 0U; - - return(nbTouch); -} - -/** - * @brief Get the touch screen X and Y positions values - * Manage multi touch thanks to touch Index global - * variable 'ft3x67_handle.currActiveTouchIdx'. - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void ft3x67_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - uint8_t regAddress = 0U; - uint8_t dataxy[4U]; - - if(ft3x67_handle.currActiveTouchIdx < ft3x67_handle.currActiveTouchNb) - { - switch(ft3x67_handle.currActiveTouchIdx) - { - case 0U : - regAddress = FT3X67_P1_XH_REG; - break; - - case 1U : - regAddress = FT3X67_P2_XH_REG; - break; - - default : - break; - } /* end switch(ft3x67_handle.currActiveTouchIdx) */ - - /* Read X and Y positions */ - TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy)); - - /* Send back ready X position to caller */ - *X = ((dataxy[0U] & FT3X67_TOUCH_POS_MSB_MASK) << 8U) | dataxy[1U]; - - /* Send back ready Y position to caller */ - *Y = ((dataxy[2U] & FT3X67_TOUCH_POS_MSB_MASK) << 8U) | dataxy[3U]; - - /* Increment current touch index */ - ft3x67_handle.currActiveTouchIdx++; - } -} - -/** - * @brief Configure the FT3X67 device to generate IT on given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT3X67). - * @retval None - */ -void ft3x67_TS_EnableIT(uint16_t DeviceAddr) -{ - /* Set interrupt trigger mode in FT3X67_GMODE_REG */ - TS_IO_Write(DeviceAddr, FT3X67_GMODE_REG, FT3X67_G_MODE_INTERRUPT_TRIGGER); -} - -/** - * @brief Configure the FT3X67 device to stop generating IT on the given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT3X67). - * @retval None - */ -void ft3x67_TS_DisableIT(uint16_t DeviceAddr) -{ - /* Set interrupt polling mode in FT3X67_GMODE_REG */ - TS_IO_Write(DeviceAddr, FT3X67_GMODE_REG, FT3X67_G_MODE_INTERRUPT_POLLING); -} - -/** - * @brief Get IT status from FT3X67 interrupt status registers - * Should be called Following an EXTI coming to the MCU to know the detailed - * reason of the interrupt. - * @note : This feature is not applicable to FT3X67. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @retval TS interrupts status : always return 0 here - */ -uint8_t ft3x67_TS_ITStatus(uint16_t DeviceAddr) -{ - /* Always return 0 as feature not applicable to FT3X67 */ - return 0U; -} - -/** - * @brief Clear IT status in FT3X67 interrupt status clear registers - * Should be called Following an EXTI coming to the MCU. - * @note : This feature is not applicable to FT3X67. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @retval None - */ -void ft3x67_TS_ClearIT(uint16_t DeviceAddr) -{ - /* Nothing to be done here for FT3X67 */ -} - -/** - * @brief Configure gesture feature (enable/disable). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @param Activation : Enable or disable gesture feature. Possible values are - * FT3X67_GESTURE_DISABLE or FT3X67_GESTURE_ENABLE. - * @retval None. - */ -void ft3x67_TS_GestureConfig(uint16_t DeviceAddr, uint32_t Activation) -{ - if(Activation == FT3X67_GESTURE_ENABLE) - { - /* Enable gesture feature. */ - TS_IO_Write(DeviceAddr, FT3X67_GESTURE_FLAG_REG, FT3X67_GEST_ALL_FLAGS_ENABLE); - TS_IO_Write(DeviceAddr, FT3X67_GESTURE_ENABLE_REG, FT3X67_GESTURE_ENABLE); - } - else - { - /* Disable gesture feature. */ - TS_IO_Write(DeviceAddr, FT3X67_GESTURE_FLAG_REG, FT3X67_GEST_ALL_FLAGS_DISABLE); - TS_IO_Write(DeviceAddr, FT3X67_GESTURE_ENABLE_REG, FT3X67_GESTURE_DISABLE); - } -} - -/** - * @brief Get the last touch gesture identification (zoom, move up/down...). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @param pGestureId : Pointer to get last touch gesture Identification. - * @retval None. - */ -void ft3x67_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId) -{ - volatile uint8_t ucReadData = 0U; - - ucReadData = TS_IO_Read(DeviceAddr, FT3X67_GEST_ID_REG); - - *pGestureId = ucReadData; -} - -/** - * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) - * This touch detailed information contains : - * - weight that was applied to this touch - * - sub-area of the touch in the touch panel - * - event of linked to the touch (press down, lift up, ...) - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT3X67). - * @param touchIdx : Passed index of the touch (0..1) on which we want to get the - * detailed information. - * @param pWeight : Pointer to to get the weight information of 'touchIdx'. - * @param pArea : Pointer to to get the sub-area information of 'touchIdx'. - * @param pEvent : Pointer to to get the event information of 'touchIdx'. - * @note Area and Weight features are not supported by FT3X67. Return always 0 value. - * @retval None. - */ -void ft3x67_TS_GetTouchInfo(uint16_t DeviceAddr, - uint32_t touchIdx, - uint32_t * pWeight, - uint32_t * pArea, - uint32_t * pEvent) -{ - volatile uint8_t ucReadData = 0U; - uint8_t regAddressXHigh = 0U; - - if(touchIdx < ft3x67_handle.currActiveTouchNb) - { - switch(touchIdx) - { - case 0U : - regAddressXHigh = FT3X67_P1_XH_REG; - break; - - case 1U : - regAddressXHigh = FT3X67_P2_XH_REG; - break; - default : - break; - } /* end switch(touchIdx) */ - - /* Read Event Id of touch index */ - ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh); - *pEvent = (ucReadData & FT3X67_TOUCH_EVT_FLAG_MASK) >> FT3X67_TOUCH_EVT_FLAG_SHIFT; - - /* Weight and area of touch index not supported by FT3X67 */ - *pWeight = 0; - *pArea = 0; - } /* of if(touchIdx < ft3x67_handle.currActiveTouchNb) */ -} - -/** - * @} - */ - -/* Private functions bodies---------------------------------------------------*/ - -/** @addtogroup FT3X67_Private_Functions - * @{ - */ - -/** - * @brief Return the status of I2C was initialized or not. - * @param None. - * @retval : I2C initialization status. - */ -static uint8_t ft3x67_Get_I2C_InitializedStatus(void) -{ - return(ft3x67_handle.i2cInitialized); -} - -/** - * @brief I2C initialize if needed. - * @param None. - * @retval : None. - */ -static void ft3x67_I2C_InitializeIfRequired(void) -{ - if(ft3x67_Get_I2C_InitializedStatus() == FT3X67_I2C_NOT_INITIALIZED) - { - /* Initialize TS IO BUS layer (I2C) */ - TS_IO_Init(); - - /* Set state to initialized */ - ft3x67_handle.i2cInitialized = FT3X67_I2C_INITIALIZED; - } -} - -/** - * @brief Basic static configuration of TouchScreen - * @param DeviceAddr: FT3X67 Device address for communication on I2C Bus. - * @retval Status FT3X67_STATUS_OK or FT3X67_STATUS_NOT_OK. - */ -static uint32_t ft3x67_TS_Configure(uint16_t DeviceAddr) -{ - uint32_t status = FT3X67_STATUS_OK; - - /* Disable gesture feature */ - TS_IO_Write(DeviceAddr, FT3X67_GESTURE_ENABLE_REG, FT3X67_GESTURE_DISABLE); - - return(status); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ft3x67/ft3x67.h b/Drivers/BSP/Components/ft3x67/ft3x67.h deleted file mode 100644 index 0867c9219b..0000000000 --- a/Drivers/BSP/Components/ft3x67/ft3x67.h +++ /dev/null @@ -1,270 +0,0 @@ -/** - ****************************************************************************** - * @file ft3x67.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * ft3x67.c touch screen driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __FT3X67_H -#define __FT3X67_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup FT3X67 - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup FT3X67_Exported_Constants - * @{ - */ - -/* Maximum border values of the touchscreen pad */ -#define FT3X67_MAX_WIDTH 390U /* Touchscreen pad max width */ -#define FT3X67_MAX_HEIGHT 390U /* Touchscreen pad max height */ - -/* Possible values of driver functions return status */ -#define FT3X67_STATUS_OK 0x00U -#define FT3X67_STATUS_NOT_OK 0x01U - -/* Possible values of global variable 'TS_I2C_Initialized' */ -#define FT3X67_I2C_NOT_INITIALIZED 0x00U -#define FT3X67_I2C_INITIALIZED 0x01U - -/* Max detectable simultaneous touches */ -#define FT3X67_MAX_DETECTABLE_TOUCH 0x02U - -/* Definitions for FT3X67 registers */ - -/* Current mode register of the FT3X67 (R/W) */ -#define FT3X67_DEV_MODE_REG 0x00U -/* Possible values of FT3X67_DEV_MODE_REG */ -#define FT3X67_DEV_MODE_WORKING 0x00U -#define FT3X67_DEV_MODE_FACTORY 0x40U - -/* Touch Data Status register : gives number of active touch points (0..2) */ -#define FT3X67_TD_STAT_REG 0x02U -/* Values related to FT3X67_TD_STAT_REG */ -#define FT3X67_TD_STAT_MASK 0x0FU - -/* Values Pn_XH and Pn_YH related */ -#define FT3X67_TOUCH_EVT_FLAG_PRESS_DOWN 0x00U -#define FT3X67_TOUCH_EVT_FLAG_LIFT_UP 0x01U -#define FT3X67_TOUCH_EVT_FLAG_CONTACT 0x02U -#define FT3X67_TOUCH_EVT_FLAG_NO_EVENT 0x03U -#define FT3X67_TOUCH_EVT_FLAG_SHIFT 0x06U -#define FT3X67_TOUCH_EVT_FLAG_MASK (3U << FT3X67_TOUCH_EVT_FLAG_SHIFT) -#define FT3X67_TOUCH_POS_MSB_MASK 0x0FU - -/* Point 1 registers */ -#define FT3X67_P1_XH_REG 0x03U -#define FT3X67_P1_XL_REG 0x04U -#define FT3X67_P1_YH_REG 0x05U -#define FT3X67_P1_YL_REG 0x06U -#define FT3X67_P1_WEIGHT_REG 0x07U -#define FT3X67_P1_MISC_REG 0x08U - -/* Point 2 registers */ -#define FT3X67_P2_XH_REG 0x09U -#define FT3X67_P2_XL_REG 0x0AU -#define FT3X67_P2_YH_REG 0x0BU -#define FT3X67_P2_YL_REG 0x0CU -#define FT3X67_P2_WEIGHT_REG 0x0DU -#define FT3X67_P2_MISC_REG 0x0EU - -/* Values related to Pn_MISC register */ -#define FT3X67_TOUCH_AREA_MASK (0xFU << FT3X67_TOUCH_AREA_SHIFT) -#define FT3X67_TOUCH_AREA_SHIFT 0x04U - -/* Threshold for touch detection register */ -#define FT3X67_TH_GROUP_REG 0x80U - -/* Filter function coefficients register */ -#define FT3X67_TH_DIFF_REG 0x85U - -/* Control register */ -#define FT3X67_CTRL_REG 0x86U -/* Values related to FT3X67_CTRL_REG */ -#define FT3X67_CTRL_KEEP_ACTIVE_MODE 0x00U -#define FT3X67_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE 0x01U - -/* The time period of switching from Active mode to Monitor mode when there is no touching */ -#define FT3X67_TIMEENTERMONITOR_REG 0x87U - -/* Report rate in Active mode */ -#define FT3X67_PERIODACTIVE_REG 0x88U - -/* Report rate in Monitor mode */ -#define FT3X67_PERIODMONITOR_REG 0x89U - -/* High 8-bit of LIB Version info */ -#define FT3X67_LIB_VER_H_REG 0xA1U - -/* Low 8-bit of LIB Version info */ -#define FT3X67_LIB_VER_L_REG 0xA2U - -/* Chip Selecting */ -#define FT3X67_CIPHER_REG 0xA3U - -/* Interrupt mode register (used when in interrupt mode) */ -#define FT3X67_GMODE_REG 0xA4U -/* Possible values of FT3X67_GMODE_REG */ -#define FT3X67_G_MODE_INTERRUPT_POLLING 0x00U -#define FT3X67_G_MODE_INTERRUPT_TRIGGER 0x01U - -/* Current power mode */ -#define FT3X67_PWR_MODE_REG 0xA5U - -/* Firmware version */ -#define FT3X67_FIRMID_REG 0xA6U - -/* Chip identification register */ -#define FT3X67_CHIP_ID_REG 0xA8U -/* Possible values of FT3X67_CHIP_ID_REG */ -#define FT3X67_ID_VALUE 0x11U - -/* Release code version */ -#define FT3X67_RELEASE_CODE_ID_REG 0xAFU - -/* Current operating mode register */ -#define FT3X67_STATE_REG 0xBCU -/* Possible values of FT3X67_STATE_REG */ -#define FT3X67_STATE_INFO_MODE 0x00U -#define FT3X67_STATE_NORMAL_MODE 0x01U -#define FT3X67_STATE_FACTORY_MODE 0x03U -#define FT3X67_STATE_AUTO_CALIB_MODE 0x04U - -/* Gesture enable register */ -#define FT3X67_GESTURE_ENABLE_REG 0xD0U -/* Possible values of FT3X67_GESTURE_ENABLE_REG */ -#define FT3X67_GESTURE_DISABLE 0x00U -#define FT3X67_GESTURE_ENABLE 0x01U - -/* Gesture flag register */ -#define FT3X67_GESTURE_FLAG_REG 0xD1U -/* Possible values of FT3X67_GESTURE_FLAG_REG can be any combination of following values */ -#define FT3X67_GEST_LINE_RIGHT_TO_LEFT_ENABLE 0x01U -#define FT3X67_GEST_LINE_LEFT_TO_RIGHT_ENABLE 0x02U -#define FT3X67_GEST_LINE_DOWN_TO_UP_ENABLE 0x04U -#define FT3X67_GEST_LINE_UP_TO_DOWN_ENABLE 0x08U -#define FT3X67_GEST_DOUBLE_TAP_ENABLE 0x10U -#define FT3X67_GEST_ALL_FLAGS_ENABLE 0x1FU -#define FT3X67_GEST_ALL_FLAGS_DISABLE 0x00U - -/* Gesture ID register */ -#define FT3X67_GEST_ID_REG 0xD3U -/* Possible values of FT3X67_GEST_ID_REG */ -#define FT3X67_GEST_ID_NO_GESTURE 0x00U -#define FT3X67_GEST_ID_MOVE_UP 0x22U -#define FT3X67_GEST_ID_MOVE_RIGHT 0x21U -#define FT3X67_GEST_ID_MOVE_DOWN 0x23U -#define FT3X67_GEST_ID_MOVE_LEFT 0x20U -#define FT3X67_GEST_ID_DOUBLE_CLICK 0x24U - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup FT3X67_Exported_Functions - * @{ - */ - -void ft3x67_Init(uint16_t DeviceAddr); -void ft3x67_Reset(uint16_t DeviceAddr); -uint16_t ft3x67_ReadID(uint16_t DeviceAddr); -void ft3x67_TS_Start(uint16_t DeviceAddr); -uint8_t ft3x67_TS_DetectTouch(uint16_t DeviceAddr); -void ft3x67_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); -void ft3x67_TS_EnableIT(uint16_t DeviceAddr); -void ft3x67_TS_DisableIT(uint16_t DeviceAddr); -uint8_t ft3x67_TS_ITStatus (uint16_t DeviceAddr); -void ft3x67_TS_ClearIT (uint16_t DeviceAddr); -void ft3x67_TS_GestureConfig(uint16_t DeviceAddr, uint32_t Activation); -void ft3x67_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId); -void ft3x67_TS_GetTouchInfo(uint16_t DeviceAddr, - uint32_t touchIdx, - uint32_t * pWeight, - uint32_t * pArea, - uint32_t * pEvent); - -/** - * @} - */ - -/* Imported TS IO functions --------------------------------------------------------*/ - -/** @defgroup FT3X67_Imported_Functions - * @{ - */ - -/* TouchScreen (TS) external IO functions */ -extern void TS_IO_Init(void); -extern void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -extern uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -extern void TS_IO_Delay(uint32_t Delay); - -/** - * @} - */ - -/* Imported global variables --------------------------------------------------------*/ - -/** @defgroup FT3X67_Imported_Globals - * @{ - */ - -/* Touch screen driver structure */ -extern TS_DrvTypeDef ft3x67_ts_drv; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif -#endif /* __FT3X67_H */ diff --git a/Drivers/BSP/Components/ft6x06 b/Drivers/BSP/Components/ft6x06 new file mode 160000 index 0000000000..8b2bc8c3fb --- /dev/null +++ b/Drivers/BSP/Components/ft6x06 @@ -0,0 +1 @@ +Subproject commit 8b2bc8c3fbb67369c095324df7523f7c6303a121 diff --git a/Drivers/BSP/Components/ft6x06/LICENSE.md b/Drivers/BSP/Components/ft6x06/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ft6x06/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ft6x06/Release_Notes.html b/Drivers/BSP/Components/ft6x06/Release_Notes.html deleted file mode 100644 index 4ff25058b1..0000000000 --- a/Drivers/BSP/Components/ft6x06/Release_Notes.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - Release Notes for FT6X06 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

FT6X06 Component Drivers

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the FT6X06 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add new FT6xx6 chip ID
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add support of FT6x36 Touch controller
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ft6x06/_htmresc/favicon.png b/Drivers/BSP/Components/ft6x06/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ft6x06/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ft6x06/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ft6x06/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ft6x06/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ft6x06/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ft6x06/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ft6x06/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ft6x06/ft6x06.c b/Drivers/BSP/Components/ft6x06/ft6x06.c deleted file mode 100644 index 8e8995d458..0000000000 --- a/Drivers/BSP/Components/ft6x06/ft6x06.c +++ /dev/null @@ -1,493 +0,0 @@ -/** - ****************************************************************************** - * @file ft6x06.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the FT6X06 - * IO Expander devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ft6x06.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup FT6XX6 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup FT6XX6_Private_Defines FT6XX6 Private Defines - * @{ - */ -#define FT6x06_MAX_INSTANCE 2 -/** - * @} - */ - -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup FT6XX6_Private_Variables FT6XX6 Private Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef ft6x06_ts_drv = -{ - ft6x06_Init, - ft6x06_ReadID, - ft6x06_Reset, - - ft6x06_TS_Start, - ft6x06_TS_DetectTouch, - ft6x06_TS_GetXY, - - ft6x06_TS_EnableIT, - ft6x06_TS_ClearIT, - ft6x06_TS_ITStatus, - ft6x06_TS_DisableIT -}; - -/* ft6xx6 instances by address */ -uint8_t ft6x06[FT6x06_MAX_INSTANCE] = {0}; - -/* Global ft6xx6 handle */ -static ft6x06_handle_TypeDef ft6x06_handle = { FT6206_I2C_NOT_INITIALIZED, 0, 0}; - -/** - * @} - */ - -/** @defgroup ft6xx6_Private_Function_Prototypes ft6xx6 Private Function Prototypes - * @{ - */ -static uint8_t ft6x06_GetInstance(uint16_t DeviceAddr); -/* Private functions prototypes-----------------------------------------------*/ -#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) -/** - * @brief Start TouchScreen calibration phase - * @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. - * @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. - */ -static uint32_t ft6x06_TS_Calibration(uint16_t DeviceAddr); -#endif /* TS_AUTO_CALIBRATION_SUPPORTED == 1 */ - -/** - * @brief Basic static configuration of TouchScreen - * @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. - * @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. - */ -static uint32_t ft6x06_TS_Configure(uint16_t DeviceAddr); - -/** - * @} - */ - -/** @defgroup ft6xx6_Private_Functions ft6xx6 Private Functions - * @{ - */ - -/** - * @brief Initialize the ft6xx6 communication bus - * from MCU to FT6xx6 : ie I2C channel initialization (if required). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval None - */ -void ft6x06_Init(uint16_t DeviceAddr) -{ - uint8_t instance; - uint8_t empty; - - /* Check if device instance already exists */ - instance = ft6x06_GetInstance(DeviceAddr); - - /* To prevent double initialization */ - if(instance == 0xFF) - { - /* Look for empty instance */ - empty = ft6x06_GetInstance(0); - - if(empty < FT6x06_MAX_INSTANCE) - { - /* Register the current device instance */ - ft6x06[empty] = DeviceAddr; - - /* Initialize IO BUS layer */ - TS_IO_Init(); - } - } -} - -/** - * @brief Software Reset the ft6xx6. - * @note : Not applicable to FT6xx6. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval None - */ -void ft6x06_Reset(uint16_t DeviceAddr) -{ - /* Do nothing */ - /* No software reset sequence available in FT6xx6 IC */ -} - -/** - * @brief Read the ft6xx6 device ID, pre initialize I2C in case of need to be - * able to read the FT6xx6 device ID, and verify this is a FT6xx6. - * @param DeviceAddr: I2C FT6xx6 Slave address. - * @retval The Device ID (two bytes). - */ -uint16_t ft6x06_ReadID(uint16_t DeviceAddr) -{ - /* Initialize I2C link if needed */ - TS_IO_Init(); - - /* Return the device ID value */ - return (TS_IO_Read(DeviceAddr, FT6206_CHIP_ID_REG)); -} - -/** - * @brief Configures the touch Screen IC device to start detecting touches - * It goes through an internal calibration process (Hw calibration sequence of - * the touch screen). - * @param DeviceAddr: Device address on communication Bus (I2C slave address). - * @retval None. - */ -void ft6x06_TS_Start(uint16_t DeviceAddr) -{ -#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) - /* Hw Calibration sequence start : should be done once after each power up */ - /* This is called internal calibration of the touch screen */ - ft6x06_TS_Calibration(DeviceAddr); -#endif - /* Minimum static configuration of FT6xx6 */ - ft6x06_TS_Configure(DeviceAddr); - - /* By default set FT6xx6 IC in Polling mode : no INT generation on FT6xx6 for new touch available */ - /* Note TS_INT is active low */ - ft6x06_TS_DisableIT(DeviceAddr); -} - -/** - * @brief Return if there is touches detected or not. - * Try to detect new touches and forget the old ones (reset internal global - * variables). - * @param DeviceAddr: Device address on communication Bus. - * @retval : Number of active touches detected (can be 0, 1 or 2). - */ -uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr) -{ - volatile uint8_t nbTouch = 0; - - /* Read register FT6206_TD_STAT_REG to check number of touches detection */ - nbTouch = TS_IO_Read(DeviceAddr, FT6206_TD_STAT_REG); - nbTouch &= FT6206_TD_STAT_MASK; - - if(nbTouch > FT6206_MAX_DETECTABLE_TOUCH) - { - /* If invalid number of touch detected, set it to zero */ - nbTouch = 0; - } - - /* Update ft6xx6 driver internal global : current number of active touches */ - ft6x06_handle.currActiveTouchNb = nbTouch; - - /* Reset current active touch index on which to work on */ - ft6x06_handle.currActiveTouchIdx = 0; - - return(nbTouch); -} - -/** - * @brief Get the touch screen X and Y positions values - * Manage multi touch thanks to touch Index global - * variable 'ft6x06_handle.currActiveTouchIdx'. - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - uint8_t regAddress = 0; - uint8_t dataxy[4]; - - if(ft6x06_handle.currActiveTouchIdx < ft6x06_handle.currActiveTouchNb) - { - switch(ft6x06_handle.currActiveTouchIdx) - { - case 0 : - regAddress = FT6206_P1_XH_REG; - break; - case 1 : - regAddress = FT6206_P2_XH_REG; - break; - - default : - break; - } - - /* Read X and Y positions */ - TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy)); - - /* Send back ready X position to caller */ - *X = ((dataxy[0] & FT6206_MSB_MASK) << 8) | (dataxy[1] & FT6206_LSB_MASK); - - /* Send back ready Y position to caller */ - *Y = ((dataxy[2] & FT6206_MSB_MASK) << 8) | (dataxy[3] & FT6206_LSB_MASK); - - ft6x06_handle.currActiveTouchIdx++; - } -} - -/** - * @brief Configure the FT6xx6 device to generate IT on given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). - * @retval None - */ -void ft6x06_TS_EnableIT(uint16_t DeviceAddr) -{ - uint8_t regValue = 0; - regValue = (FT6206_G_MODE_INTERRUPT_TRIGGER & (FT6206_G_MODE_INTERRUPT_MASK >> FT6206_G_MODE_INTERRUPT_SHIFT)) << FT6206_G_MODE_INTERRUPT_SHIFT; - - /* Set interrupt trigger mode in FT6206_GMODE_REG */ - TS_IO_Write(DeviceAddr, FT6206_GMODE_REG, regValue); -} - -/** - * @brief Configure the FT6xx6 device to stop generating IT on the given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). - * @retval None - */ -void ft6x06_TS_DisableIT(uint16_t DeviceAddr) -{ - uint8_t regValue = 0; - regValue = (FT6206_G_MODE_INTERRUPT_POLLING & (FT6206_G_MODE_INTERRUPT_MASK >> FT6206_G_MODE_INTERRUPT_SHIFT)) << FT6206_G_MODE_INTERRUPT_SHIFT; - - /* Set interrupt polling mode in FT6206_GMODE_REG */ - TS_IO_Write(DeviceAddr, FT6206_GMODE_REG, regValue); -} - -/** - * @brief Get IT status from FT6xx6 interrupt status registers - * Should be called Following an EXTI coming to the MCU to know the detailed - * reason of the interrupt. - * @note : This feature is not applicable to FT6xx6. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval TS interrupts status : always return 0 here - */ -uint8_t ft6x06_TS_ITStatus(uint16_t DeviceAddr) -{ - /* Always return 0 as feature not applicable to FT6xx6 */ - return 0; -} - -/** - * @brief Clear IT status in FT6xx6 interrupt status clear registers - * Should be called Following an EXTI coming to the MCU. - * @note : This feature is not applicable to FT6xx6. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval None - */ -void ft6x06_TS_ClearIT(uint16_t DeviceAddr) -{ - /* Nothing to be done here for FT6xx6 */ -} - -/**** NEW FEATURES enabled when Multi-touch support is enabled ****/ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Get the last touch gesture identification (zoom, move up/down...). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @param pGestureId : Pointer to get last touch gesture Identification. - * @retval None. - */ -void ft6x06_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId) -{ - volatile uint8_t ucReadData = 0; - - ucReadData = TS_IO_Read(DeviceAddr, FT6206_GEST_ID_REG); - - * pGestureId = ucReadData; -} - -/** - * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) - * This touch detailed information contains : - * - weight that was applied to this touch - * - sub-area of the touch in the touch panel - * - event of linked to the touch (press down, lift up, ...) - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @param touchIdx : Passed index of the touch (0..1) on which we want to get the - * detailed information. - * @param pWeight : Pointer to to get the weight information of 'touchIdx'. - * @param pArea : Pointer to to get the sub-area information of 'touchIdx'. - * @param pEvent : Pointer to to get the event information of 'touchIdx'. - - * @retval None. - */ -void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr, - uint32_t touchIdx, - uint32_t * pWeight, - uint32_t * pArea, - uint32_t * pEvent) -{ - uint8_t regAddress = 0; - uint8_t dataxy[3]; - - if(touchIdx < ft6x06_handle.currActiveTouchNb) - { - switch(touchIdx) - { - case 0 : - regAddress = FT6206_P1_WEIGHT_REG; - break; - - case 1 : - regAddress = FT6206_P2_WEIGHT_REG; - break; - - default : - break; - - } /* end switch(touchIdx) */ - - /* Read weight, area and Event Id of touch index */ - TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy)); - - /* Return weight of touch index */ - * pWeight = (dataxy[0] & FT6206_TOUCH_WEIGHT_MASK) >> FT6206_TOUCH_WEIGHT_SHIFT; - /* Return area of touch index */ - * pArea = (dataxy[1] & FT6206_TOUCH_AREA_MASK) >> FT6206_TOUCH_AREA_SHIFT; - /* Return Event Id of touch index */ - * pEvent = (dataxy[2] & FT6206_TOUCH_EVT_FLAG_MASK) >> FT6206_TOUCH_EVT_FLAG_SHIFT; - - } /* of if(touchIdx < ft6x06_handle.currActiveTouchNb) */ -} - -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -#if (TS_AUTO_CALIBRATION_SUPPORTED == 1) -/** - * @brief Start TouchScreen calibration phase - * @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. - * @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. - */ -static uint32_t ft6x06_TS_Calibration(uint16_t DeviceAddr) -{ - uint32_t nbAttempt = 0; - volatile uint8_t ucReadData; - volatile uint8_t regValue; - uint32_t status = FT6206_STATUS_OK; - uint8_t bEndCalibration = 0; - - /* >> Calibration sequence start */ - - /* Switch FT6xx6 back to factory mode to calibrate */ - regValue = (FT6206_DEV_MODE_FACTORY & FT6206_DEV_MODE_MASK) << FT6206_DEV_MODE_SHIFT; - TS_IO_Write(DeviceAddr, FT6206_DEV_MODE_REG, regValue); /* 0x40 */ - - /* Read back the same register FT6206_DEV_MODE_REG */ - ucReadData = TS_IO_Read(DeviceAddr, FT6206_DEV_MODE_REG); - TS_IO_Delay(300); /* Wait 300 ms */ - - if(((ucReadData & (FT6206_DEV_MODE_MASK << FT6206_DEV_MODE_SHIFT)) >> FT6206_DEV_MODE_SHIFT) != FT6206_DEV_MODE_FACTORY ) - { - /* Return error to caller */ - return(FT6206_STATUS_NOT_OK); - } - - /* Start calibration command */ - TS_IO_Write(DeviceAddr, FT6206_TD_STAT_REG, 0x04); - TS_IO_Delay(300); /* Wait 300 ms */ - - /* 100 attempts to wait switch from factory mode (calibration) to working mode */ - for (nbAttempt=0; ((nbAttempt < 100) && (!bEndCalibration)) ; nbAttempt++) - { - ucReadData = TS_IO_Read(DeviceAddr, FT6206_DEV_MODE_REG); - ucReadData = (ucReadData & (FT6206_DEV_MODE_MASK << FT6206_DEV_MODE_SHIFT)) >> FT6206_DEV_MODE_SHIFT; - if(ucReadData == FT6206_DEV_MODE_WORKING) - { - /* Auto Switch to FT6206_DEV_MODE_WORKING : means calibration have ended */ - bEndCalibration = 1; /* exit for loop */ - } - - TS_IO_Delay(200); /* Wait 200 ms */ - } - - /* Calibration sequence end << */ - - return(status); -} -#endif /* TS_AUTO_CALIBRATION_SUPPORTED == 1 */ - -/** - * @brief Basic static configuration of TouchScreen - * @param DeviceAddr: FT6xx6 Device address for communication on I2C Bus. - * @retval Status FT6206_STATUS_OK or FT6206_STATUS_NOT_OK. - */ -static uint32_t ft6x06_TS_Configure(uint16_t DeviceAddr) -{ - uint32_t status = FT6206_STATUS_OK; - - /* Nothing special to be done for FT6xx6 */ - - return(status); -} - -/** - * @brief Check if the device instance of the selected address is already registered - * and return its index - * @param DeviceAddr: Device address on communication Bus. - * @retval Index of the device instance if registered, 0xFF if not. - */ -static uint8_t ft6x06_GetInstance(uint16_t DeviceAddr) -{ - uint8_t idx = 0; - - /* Check all the registered instances */ - for(idx = 0; idx < FT6x06_MAX_INSTANCE ; idx ++) - { - if(ft6x06[idx] == DeviceAddr) - { - return idx; - } - } - - return 0xFF; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ft6x06/ft6x06.h b/Drivers/BSP/Components/ft6x06/ft6x06.h deleted file mode 100644 index 77e7835119..0000000000 --- a/Drivers/BSP/Components/ft6x06/ft6x06.h +++ /dev/null @@ -1,452 +0,0 @@ -/** - ****************************************************************************** - * @file ft6x06.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * ft6x06.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __FT6XX6_H -#define __FT6XX6_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Set Multi-touch as non supported */ -#ifndef TS_MULTI_TOUCH_SUPPORTED - #define TS_MULTI_TOUCH_SUPPORTED 0 -#endif - -/* Set Auto-calibration as non supported */ -#ifndef TS_AUTO_CALIBRATION_SUPPORTED - #define TS_AUTO_CALIBRATION_SUPPORTED 0 -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" - -/* Macros --------------------------------------------------------------------*/ - -/** @typedef ft6x06_handle_TypeDef - * ft6x06 Handle definition. - */ -typedef struct -{ - uint8_t i2cInitialized; - - /* field holding the current number of simultaneous active touches */ - uint8_t currActiveTouchNb; - - /* field holding the touch index currently managed */ - uint8_t currActiveTouchIdx; - -} ft6x06_handle_TypeDef; - - /** @addtogroup BSP - * @{ - */ - - /** @addtogroup Component - * @{ - */ - - /** @defgroup FT6XX6 - * @{ - */ - - /* Exported types ------------------------------------------------------------*/ - - /** @defgroup FT6XX6_Exported_Types - * @{ - */ - - /* Exported constants --------------------------------------------------------*/ - - /** @defgroup FT6XX6_Exported_Constants - * @{ - */ - - /* Maximum border values of the touchscreen pad */ -#define FT_6206_MAX_WIDTH ((uint16_t)800) /* Touchscreen pad max width */ -#define FT_6206_MAX_HEIGHT ((uint16_t)480) /* Touchscreen pad max height */ - - /* Touchscreen pad max width and height values for FT6xx6 Touch*/ -#define FT_6206_MAX_WIDTH_HEIGHT ((uint16_t)240) - - /* Possible values of driver functions return status */ -#define FT6206_STATUS_OK 0 -#define FT6206_STATUS_NOT_OK 1 - - /* Possible values of global variable 'TS_I2C_Initialized' */ -#define FT6206_I2C_NOT_INITIALIZED 0 -#define FT6206_I2C_INITIALIZED 1 - - /* Max detectable simultaneous touches */ -#define FT6206_MAX_DETECTABLE_TOUCH 2 - - /** - * @brief : Definitions for FT6xx6 I2C register addresses on 8 bit - **/ - - /* Current mode register of the FT6xx6 (R/W) */ -#define FT6206_DEV_MODE_REG 0x00 - - /* Possible values of FT6206_DEV_MODE_REG */ -#define FT6206_DEV_MODE_WORKING 0x00 -#define FT6206_DEV_MODE_FACTORY 0x04 - -#define FT6206_DEV_MODE_MASK 0x7 -#define FT6206_DEV_MODE_SHIFT 4 - - /* Gesture ID register */ -#define FT6206_GEST_ID_REG 0x01 - - /* Possible values of FT6206_GEST_ID_REG */ -#define FT6206_GEST_ID_NO_GESTURE 0x00 -#define FT6206_GEST_ID_MOVE_UP 0x10 -#define FT6206_GEST_ID_MOVE_RIGHT 0x14 -#define FT6206_GEST_ID_MOVE_DOWN 0x18 -#define FT6206_GEST_ID_MOVE_LEFT 0x1C -#define FT6206_GEST_ID_ZOOM_IN 0x48 -#define FT6206_GEST_ID_ZOOM_OUT 0x49 - - /* Touch Data Status register : gives number of active touch points (0..2) */ -#define FT6206_TD_STAT_REG 0x02 - - /* Values related to FT6206_TD_STAT_REG */ -#define FT6206_TD_STAT_MASK 0x0F -#define FT6206_TD_STAT_SHIFT 0x00 - - /* Values Pn_XH and Pn_YH related */ -#define FT6206_TOUCH_EVT_FLAG_PRESS_DOWN 0x00 -#define FT6206_TOUCH_EVT_FLAG_LIFT_UP 0x01 -#define FT6206_TOUCH_EVT_FLAG_CONTACT 0x02 -#define FT6206_TOUCH_EVT_FLAG_NO_EVENT 0x03 - -#define FT6206_TOUCH_EVT_FLAG_SHIFT 6 -#define FT6206_TOUCH_EVT_FLAG_MASK (3 << FT6206_TOUCH_EVT_FLAG_SHIFT) - -#define FT6206_MSB_MASK 0x0F -#define FT6206_MSB_SHIFT 0 - - /* Values Pn_XL and Pn_YL related */ -#define FT6206_LSB_MASK 0xFF -#define FT6206_LSB_SHIFT 0 - -#define FT6206_P1_XH_REG 0x03 -#define FT6206_P1_XL_REG 0x04 -#define FT6206_P1_YH_REG 0x05 -#define FT6206_P1_YL_REG 0x06 - - /* Touch Pressure register value (R) */ -#define FT6206_P1_WEIGHT_REG 0x07 - - /* Values Pn_WEIGHT related */ -#define FT6206_TOUCH_WEIGHT_MASK 0xFF -#define FT6206_TOUCH_WEIGHT_SHIFT 0 - - /* Touch area register */ -#define FT6206_P1_MISC_REG 0x08 - - /* Values related to FT6206_Pn_MISC_REG */ -#define FT6206_TOUCH_AREA_MASK (0x04 << 4) -#define FT6206_TOUCH_AREA_SHIFT 0x04 - -#define FT6206_P2_XH_REG 0x09 -#define FT6206_P2_XL_REG 0x0A -#define FT6206_P2_YH_REG 0x0B -#define FT6206_P2_YL_REG 0x0C -#define FT6206_P2_WEIGHT_REG 0x0D -#define FT6206_P2_MISC_REG 0x0E - - /* Threshold for touch detection */ -#define FT6206_TH_GROUP_REG 0x80 - - /* Values FT6206_TH_GROUP_REG : threshold related */ -#define FT6206_THRESHOLD_MASK 0xFF -#define FT6206_THRESHOLD_SHIFT 0 - - /* Filter function coefficients */ -#define FT6206_TH_DIFF_REG 0x85 - - /* Control register */ -#define FT6206_CTRL_REG 0x86 - - /* Values related to FT6206_CTRL_REG */ - - /* Will keep the Active mode when there is no touching */ -#define FT6206_CTRL_KEEP_ACTIVE_MODE 0x00 - - /* Switching from Active mode to Monitor mode automatically when there is no touching */ -#define FT6206_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE 0x01 - - /* The time period of switching from Active mode to Monitor mode when there is no touching */ -#define FT6206_TIMEENTERMONITOR_REG 0x87 - - /* Report rate in Active mode */ -#define FT6206_PERIODACTIVE_REG 0x88 - - /* Report rate in Monitor mode */ -#define FT6206_PERIODMONITOR_REG 0x89 - - /* The value of the minimum allowed angle while Rotating gesture mode */ -#define FT6206_RADIAN_VALUE_REG 0x91 - - /* Maximum offset while Moving Left and Moving Right gesture */ -#define FT6206_OFFSET_LEFT_RIGHT_REG 0x92 - - /* Maximum offset while Moving Up and Moving Down gesture */ -#define FT6206_OFFSET_UP_DOWN_REG 0x93 - - /* Minimum distance while Moving Left and Moving Right gesture */ -#define FT6206_DISTANCE_LEFT_RIGHT_REG 0x94 - - /* Minimum distance while Moving Up and Moving Down gesture */ -#define FT6206_DISTANCE_UP_DOWN_REG 0x95 - - /* Maximum distance while Zoom In and Zoom Out gesture */ -#define FT6206_DISTANCE_ZOOM_REG 0x96 - - /* High 8-bit of LIB Version info */ -#define FT6206_LIB_VER_H_REG 0xA1 - - /* Low 8-bit of LIB Version info */ -#define FT6206_LIB_VER_L_REG 0xA2 - - /* Chip Selecting */ -#define FT6206_CIPHER_REG 0xA3 - - /* Interrupt mode register (used when in interrupt mode) */ -#define FT6206_GMODE_REG 0xA4 - -#define FT6206_G_MODE_INTERRUPT_MASK 0x03 -#define FT6206_G_MODE_INTERRUPT_SHIFT 0x00 - - /* Possible values of FT6206_GMODE_REG */ -#define FT6206_G_MODE_INTERRUPT_POLLING 0x00 -#define FT6206_G_MODE_INTERRUPT_TRIGGER 0x01 - - /* Current power mode the FT6xx6 system is in (R) */ -#define FT6206_PWR_MODE_REG 0xA5 - - /* FT6xx6 firmware version */ -#define FT6206_FIRMID_REG 0xA6 - - /* FT6xx6 Chip identification register */ -#define FT6206_CHIP_ID_REG 0xA8 - - /* Possible values of touchscreen controller ID */ -#define FT6206_ID_VALUE 0x11 -#define FT6x36_ID_VALUE 0xCD -#define FT6X36_ID2_VALUE 0xD8 - - /* Release code version */ -#define FT6206_RELEASE_CODE_ID_REG 0xAF - - /* Current operating mode the FT6xx6 system is in (R) */ -#define FT6206_STATE_REG 0xBC - - /** - * @} - */ - - /* Exported macro ------------------------------------------------------------*/ - - /** @defgroup ft6xx6_Exported_Macros - * @{ - */ - - /* Exported functions --------------------------------------------------------*/ - - /** @defgroup ft6xx6_Exported_Functions - * @{ - */ - - /** - * @brief ft6xx6 Control functions - */ - - -/** - * @brief Initialize the ft6xx6 communication bus - * from MCU to FT6xx6 : ie I2C channel initialization (if required). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval None - */ -void ft6x06_Init(uint16_t DeviceAddr); - -/** - * @brief Software Reset the ft6xx6. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval None - */ -void ft6x06_Reset(uint16_t DeviceAddr); - -/** - * @brief Read the ft6xx6 device ID, pre intitalize I2C in case of need to be - * able to read the FT6xx6 device ID, and verify this is a FT6xx6. - * @param DeviceAddr: I2C FT6xx6 Slave address. - * @retval The Device ID (two bytes). - */ -uint16_t ft6x06_ReadID(uint16_t DeviceAddr); - -/** - * @brief Configures the touch Screen IC device to start detecting touches - * @param DeviceAddr: Device address on communication Bus (I2C slave address). - * @retval None. - */ -void ft6x06_TS_Start(uint16_t DeviceAddr); - -/** - * @brief Return if there is touches detected or not. - * Try to detect new touches and forget the old ones (reset internal global - * variables). - * @param DeviceAddr: Device address on communication Bus. - * @retval : Number of active touches detected (can be 0, 1 or 2). - */ -uint8_t ft6x06_TS_DetectTouch(uint16_t DeviceAddr); - -/** - * @brief Get the touch screen X and Y positions values - * Manage multi touch thanks to touch Index global - * variable 'ft6x06_handle.currActiveTouchIdx'. - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void ft6x06_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); - -/** - * @brief Configure the FT6xx6 device to generate IT on given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). - * @retval None - */ -void ft6x06_TS_EnableIT(uint16_t DeviceAddr); - -/** - * @brief Configure the FT6xx6 device to stop generating IT on the given INT pin - * connected to MCU as EXTI. - * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT6xx6). - * @retval None - */ -void ft6x06_TS_DisableIT(uint16_t DeviceAddr); - -/** - * @brief Get IT status from FT6xx6 interrupt status registers - * Should be called Following an EXTI coming to the MCU to know the detailed - * reason of the interrupt. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval TS interrupts status - */ -uint8_t ft6x06_TS_ITStatus (uint16_t DeviceAddr); - -/** - * @brief Clear IT status in FT6xx6 interrupt status clear registers - * Should be called Following an EXTI coming to the MCU. - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @retval TS interrupts status - */ -void ft6x06_TS_ClearIT (uint16_t DeviceAddr); - -/**** NEW FEATURES enabled when Multi-touch support is enabled ****/ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - -/** - * @brief Get the last touch gesture identification (zoom, move up/down...). - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @param pGestureId : Pointer to get last touch gesture Identification. - * @retval None. - */ -void ft6x06_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId); - -/** - * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) - * This touch detailed information contains : - * - weight that was applied to this touch - * - sub-area of the touch in the touch panel - * - event of linked to the touch (press down, lift up, ...) - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6xx6). - * @param touchIdx : Passed index of the touch (0..1) on which we want to get the - * detailed information. - * @param pWeight : Pointer to to get the weight information of 'touchIdx'. - * @param pArea : Pointer to to get the sub-area information of 'touchIdx'. - * @param pEvent : Pointer to to get the event information of 'touchIdx'. - - * @retval None. - */ -void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr, - uint32_t touchIdx, - uint32_t * pWeight, - uint32_t * pArea, - uint32_t * pEvent); - -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -/* Imported TS IO functions --------------------------------------------------------*/ - -/** @defgroup ft6xx6_Imported_Functions - * @{ - */ - -/* TouchScreen (TS) external IO functions */ -extern void TS_IO_Init(void); -extern void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -extern uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -extern void TS_IO_Delay(uint32_t Delay); - - /** - * @} - */ - - /* Imported global variables --------------------------------------------------------*/ - - /** @defgroup ft6xx6_Imported_Globals - * @{ - */ - - -/* Touch screen driver structure */ -extern TS_DrvTypeDef ft6x06_ts_drv; - - /** - * @} - */ - -#ifdef __cplusplus -} -#endif -#endif /* __FT6XX6_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/i3g4250d b/Drivers/BSP/Components/i3g4250d new file mode 160000 index 0000000000..9025713239 --- /dev/null +++ b/Drivers/BSP/Components/i3g4250d @@ -0,0 +1 @@ +Subproject commit 9025713239c18f842f56d0f5176abe652631c2ec diff --git a/Drivers/BSP/Components/i3g4250d/LICENSE.md b/Drivers/BSP/Components/i3g4250d/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/i3g4250d/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/i3g4250d/Release_Notes.html b/Drivers/BSP/Components/i3g4250d/Release_Notes.html deleted file mode 100644 index 984d097f21..0000000000 --- a/Drivers/BSP/Components/i3g4250d/Release_Notes.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - Release Notes for I3G4250D Component Drivers - - - - - - -
-
-
-

Release Notes for

-

I3G4250D Component Drivers

-

Copyright © 2020 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the I3G4250D Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of I3G4250D gyroscope
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/i3g4250d/_htmresc/favicon.png b/Drivers/BSP/Components/i3g4250d/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/i3g4250d/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st.css b/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st.css deleted file mode 100644 index 71fbc14fc2..0000000000 --- a/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st.css +++ /dev/null @@ -1,1700 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Default (mini-default) - Author: Angelos Chalaris (chalarangelo@gmail.com) - Maintainers: Angelos Chalaris - mini.css version: v3.0.0-alpha.3 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #111; - --secondary-fore-color: #444; - --back-color: #f8f8f8; - --secondary-back-color: #f0f0f0; - --blockquote-color: #f57c00; - --pre-color: #1565c0; - --border-color: #aaa; - --secondary-border-color: #ddd; - --heading-ratio: 1.19; - --universal-margin: 0.5rem; - --universal-padding: 0.125rem; - --universal-border-radius: 0.125rem; - --a-link-color: #0277bd; - --a-visited-color: #01579b; } - -html { - font-size: 14px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, sans-serif; - line-height: 1.4; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - background: var(--back-color); } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.2; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 500; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio); ); - background: var(--mark-back-color); - font-weight: 600; - padding: 0.1em 0.5em 0.2em 0.5em; - color: var(--mark-fore-color); } - -h3 { - font-size: calc(1rem * var(--heading-ratio)); - padding-left: calc(2 * var(--universal-margin)); - /* background: var(--border-color); */ - } - -h4 { - font-size: 1rem;); - padding-left: calc(4 * var(--universal-margin)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(6 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0625rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0625rem solid var(--secondary-border-color); - border-left: 0.375rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 3rem; - font-weight: 700; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0625rem solid var(--secondary-border-color); - border-left: 0.25rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #f8f8f8; - --card-fore-color: #111; - --card-border-color: #ddd; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0625rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0625rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { -/* --card-back-color: #ffca28; */ - --card-back-color: #e5b8b7; - --card-border-color: #e8b825; } - -.card.error { - --card-back-color: #b71c1c; - --card-fore-color: #f8f8f8; - --card-border-color: #a71a1a; } - -.card > .sectione.dark { - --card-back-color: #e0e0e0; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #f0f0f0; - --form-fore-color: #111; - --form-border-color: #ddd; - --input-back-color: #f8f8f8; - --input-fore-color: #111; - --input-border-color: #ddd; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0625rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0625rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 700; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0625rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0625rem + var(--universal-padding) / 2); - left: calc(0.0625rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0625rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0625rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0625rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0625rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #f8f8f8; - --header-hover-back-color: #f0f0f0; - --header-fore-color: #444; - --header-border-color: #ddd; - --nav-back-color: #f8f8f8; - --nav-hover-back-color: #f0f0f0; - --nav-fore-color: #444; - --nav-border-color: #ddd; - --nav-link-color: #0277bd; - --footer-fore-color: #444; - --footer-back-color: #f8f8f8; - --footer-border-color: #ddd; - --footer-link-color: #0277bd; - --drawer-back-color: #f8f8f8; - --drawer-hover-back-color: #f0f0f0; - --drawer-border-color: #ddd; - --drawer-close-color: #444; } - -header { - height: 3.1875rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0625rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0625rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0625rem; - content: ''; - height: 100%; - border: 0.0625rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0625rem; - content: ''; - height: 100%; - border: 0.0625rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0625rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0625rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #aaa; - --table-border-separator-color: #666; - --table-head-back-color: #e6e6e6; - --table-head-fore-color: #111; - --table-body-back-color: #f8f8f8; - --table-body-fore-color: #111; - --table-body-alt-back-color: #eee; } - -table { - border-collapse: separate; - border-spacing: 0; - : margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); } - table caption { - font-size: 1.25 * rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; - text-align: left;} - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0625rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0625rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0625rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 850px; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: 1 0 0; - margin-left: calc( 4 * var(--universal-margin)); - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: 100%; - border: 0; - border-bottom: 0.0625rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0625rem solid var(--table-border-color); - border-right: 0.0625rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0625rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0625rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0625rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #fafafa; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(2 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -:root { - --table-body-alt-back-color: #eee; } - -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #0277bd; - --mark-fore-color: #fafafa; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.5; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #444; - --modal-close-hover-color: #f0f0f0; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #e8e8e8; - --collapse-label-fore-color: #212121; - --collapse-label-hover-back-color: #f0f0f0; - --collapse-selected-label-back-color: #ececec; - --collapse-border-color: #ddd; - --collapse-content-back-color: #fafafa; - --collapse-selected-label-border-color: #0277bd; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.5rem; - cursor: pointer; - transition: background 0.3s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0625rem solid var(--collapse-border-color); - padding: calc(1.5 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-bottom-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0625rem solid var(--collapse-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 850px; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.secondary { - --mark-back-color: #d32f2f; } - -mark.tertiary { - --mark-back-color: #308732; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progess module CSS variable definitions */ -:root { - --progress-back-color: #ddd; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.25rem 0.25rem 0 rgba(0, 0, 0, 0.125), 0 0.125rem 0.125rem -0.125rem rgba(0, 0, 0, 0.25); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0625rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-default.css.map */ diff --git a/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/i3g4250d/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo.png b/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo.png deleted file mode 100644 index 8b80057fd3..0000000000 Binary files a/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo.png and /dev/null differ diff --git a/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/i3g4250d/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/i3g4250d/i3g4250d.c b/Drivers/BSP/Components/i3g4250d/i3g4250d.c deleted file mode 100644 index 3ad1dfd7ea..0000000000 --- a/Drivers/BSP/Components/i3g4250d/i3g4250d.c +++ /dev/null @@ -1,396 +0,0 @@ -/** - ****************************************************************************** - * @file i3g4250d.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the I3G4250D, - * ST MEMS motion sensor, 3-axis digital output gyroscope. - ****************************************************************************** - * @attention - * - * Copyright (c) 2020 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "i3g4250d.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup I3G4250D - * @{ - */ - -/** @defgroup I3G4250D_Private_TypesDefinitions Private Types Definitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup I3G4250D_Private_Defines Private Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup I3G4250D_Private_Macros Private Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup I3G4250D_Private_Variables Private Variables - * @{ - */ -GYRO_DrvTypeDef I3g4250Drv = -{ - I3G4250D_Init, - I3G4250D_DeInit, - I3G4250D_ReadID, - I3G4250D_RebootCmd, - I3G4250D_LowPower, - I3G4250D_INT1InterruptConfig, - I3G4250D_EnableIT, - I3G4250D_DisableIT, - 0, - 0, - I3G4250D_FilterConfig, - I3G4250D_FilterCmd, - I3G4250D_ReadXYZAngRate -}; - -/** - * @} - */ - -/** @defgroup I3G4250D_Private_FunctionPrototypes Private Function Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup I3G4250D_Private_Functions Private Functions - * @{ - */ - -/** - * @brief Set I3G4250D Initialization. - * @param I3G4250D_InitStruct: pointer to a I3G4250D_InitTypeDef structure - * that contains the configuration setting for the I3G4250D. - * @retval None - */ -void I3G4250D_Init(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Configure the low level interface */ - GYRO_IO_Init(); - - /* Write value to MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - GYRO_IO_Write(&ctrl, I3G4250D_CTRL_REG1_ADDR, 1); - - /* Write value to MEMS CTRL_REG4 register */ - ctrl = (uint8_t)(InitStruct >> 8); - GYRO_IO_Write(&ctrl, I3G4250D_CTRL_REG4_ADDR, 1); -} - - - -/** - * @brief I3G4250D De-initialization - * @param None - * @retval None - */ -void I3G4250D_DeInit(void) -{ -} - -/** - * @brief Read ID address of I3G4250D - * @param None - * @retval ID name - */ -uint8_t I3G4250D_ReadID(void) -{ - uint8_t tmp; - - /* Configure the low level interface */ - GYRO_IO_Init(); - - /* Read WHO I AM register */ - GYRO_IO_Read(&tmp, I3G4250D_WHO_AM_I_ADDR, 1); - - /* Return the ID */ - return (uint8_t)tmp; -} - -/** - * @brief Reboot memory content of I3G4250D - * @param None - * @retval None - */ -void I3G4250D_RebootCmd(void) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG5_ADDR, 1); - - /* Enable or Disable the reboot memory */ - tmpreg |= I3G4250D_BOOT_REBOOTMEMORY; - - /* Write value to MEMS CTRL_REG5 register */ - GYRO_IO_Write(&tmpreg, I3G4250D_CTRL_REG5_ADDR, 1); -} - -/** - * @brief Set I3G4250D in low-power mode - * @param I3G4250D_InitStruct: pointer to a I3G4250D_InitTypeDef structure - * that contains the configuration setting for the I3G4250D. - * @retval None - */ -void I3G4250D_LowPower(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Write value to MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - GYRO_IO_Write(&ctrl, I3G4250D_CTRL_REG1_ADDR, 1); -} - -/** - * @brief Set I3G4250D Interrupt INT1 configuration - * @param Int1Config: the configuration setting for the I3G4250D Interrupt. - * @retval None - */ -void I3G4250D_INT1InterruptConfig(uint16_t Int1Config) -{ - uint8_t ctrl_cfr = 0x00, ctrl3 = 0x00; - - /* Read INT1_CFG register */ - GYRO_IO_Read(&ctrl_cfr, I3G4250D_INT1_CFG_ADDR, 1); - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&ctrl3, I3G4250D_CTRL_REG3_ADDR, 1); - - ctrl_cfr &= 0x80; - ctrl_cfr |= ((uint8_t) Int1Config >> 8); - - ctrl3 &= 0xDF; - ctrl3 |= ((uint8_t) Int1Config); - - /* Write value to MEMS INT1_CFG register */ - GYRO_IO_Write(&ctrl_cfr, I3G4250D_INT1_CFG_ADDR, 1); - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&ctrl3, I3G4250D_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Enable INT1 or INT2 interrupt - * @param IntSel: choice of INT1 or INT2 - * This parameter can be: - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - * @retval None - */ -void I3G4250D_EnableIT(uint8_t IntSel) -{ - uint8_t tmpreg; - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG3_ADDR, 1); - - if (IntSel == I3G4250D_INT1) - { - tmpreg &= 0x7F; - tmpreg |= I3G4250D_INT1INTERRUPT_ENABLE; - } - else if (IntSel == I3G4250D_INT2) - { - tmpreg &= 0xF7; - tmpreg |= I3G4250D_INT2INTERRUPT_ENABLE; - } - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&tmpreg, I3G4250D_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Disable INT1 or INT2 interrupt - * @param IntSel: choice of INT1 or INT2 - * This parameter can be: - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - * @retval None - */ -void I3G4250D_DisableIT(uint8_t IntSel) -{ - uint8_t tmpreg; - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG3_ADDR, 1); - - if (IntSel == I3G4250D_INT1) - { - tmpreg &= 0x7F; - tmpreg |= I3G4250D_INT1INTERRUPT_DISABLE; - } - else if (IntSel == I3G4250D_INT2) - { - tmpreg &= 0xF7; - tmpreg |= I3G4250D_INT2INTERRUPT_DISABLE; - } - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&tmpreg, I3G4250D_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Set High Pass Filter Modality - * @param FilterStruct: contains the configuration setting for the L3GD20. - * @retval None - */ -void I3G4250D_FilterConfig(uint8_t FilterStruct) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG2_ADDR, 1); - - tmpreg &= 0xC0; - - /* Configure MEMS: mode and cutoff frequency */ - tmpreg |= FilterStruct; - - /* Write value to MEMS CTRL_REG2 register */ - GYRO_IO_Write(&tmpreg, I3G4250D_CTRL_REG2_ADDR, 1); -} - -/** - * @brief Enable or Disable High Pass Filter - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: I3G4250D_HIGHPASSFILTER_DISABLE - * @arg: I3G4250D_HIGHPASSFILTER_ENABLE - * @retval None - */ -void I3G4250D_FilterCmd(uint8_t HighPassFilterState) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG5_ADDR, 1); - - tmpreg &= 0xEF; - - tmpreg |= HighPassFilterState; - - /* Write value to MEMS CTRL_REG5 register */ - GYRO_IO_Write(&tmpreg, I3G4250D_CTRL_REG5_ADDR, 1); -} - -/** - * @brief Get status for I3G4250D data - * @param None - * @retval Data status in a I3G4250D Data - */ -uint8_t I3G4250D_GetDataStatus(void) -{ - uint8_t tmpreg; - - /* Read STATUS_REG register */ - GYRO_IO_Read(&tmpreg, I3G4250D_STATUS_REG_ADDR, 1); - - return tmpreg; -} - -/** -* @brief Calculate the I3G4250D angular data. -* @param pfData: Data out pointer -* @retval None -*/ -void I3G4250D_ReadXYZAngRate(float *pfData) -{ - uint8_t tmpbuffer[6] = {0}; - int16_t RawData[3] = {0}; - uint8_t tmpreg = 0; - float sensitivity = 0; - int i = 0; - - GYRO_IO_Read(&tmpreg, I3G4250D_CTRL_REG4_ADDR, 1); - - GYRO_IO_Read(tmpbuffer, I3G4250D_OUT_X_L_ADDR, 6); - - /* check in the control register 4 the data alignment (Big Endian or Little Endian)*/ - if (!(tmpreg & I3G4250D_BLE_MSB)) - { - for (i = 0; i < 3; i++) - { - RawData[i] = (int16_t)(((uint16_t)tmpbuffer[2 * i + 1] << 8) + tmpbuffer[2 * i]); - } - } - else - { - for (i = 0; i < 3; i++) - { - RawData[i] = (int16_t)(((uint16_t)tmpbuffer[2 * i] << 8) + tmpbuffer[2 * i + 1]); - } - } - - /* Switch the sensitivity value set in the CRTL4 */ - switch (tmpreg & I3G4250D_FULLSCALE_SELECTION) - { - case I3G4250D_FULLSCALE_245: - sensitivity = I3G4250D_SENSITIVITY_245DPS; - break; - - case I3G4250D_FULLSCALE_500: - sensitivity = I3G4250D_SENSITIVITY_500DPS; - break; - - case I3G4250D_FULLSCALE_2000: - sensitivity = I3G4250D_SENSITIVITY_2000DPS; - break; - } - /* Multiplied by sensitivity */ - for (i = 0; i < 3; i++) - { - pfData[i] = (float)(RawData[i] * sensitivity); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/i3g4250d/i3g4250d.h b/Drivers/BSP/Components/i3g4250d/i3g4250d.h deleted file mode 100644 index 44797ff574..0000000000 --- a/Drivers/BSP/Components/i3g4250d/i3g4250d.h +++ /dev/null @@ -1,302 +0,0 @@ -/** - ****************************************************************************** - * @file i3g4250d.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the i3g4250d.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2020 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __I3G4250D_H -#define __I3G4250D_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/gyro.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup I3G4250D - * @{ - */ - -/** @defgroup I3G4250D_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ -#define I3G4250D_WHO_AM_I_ADDR 0x0F /* device identification register */ -#define I3G4250D_CTRL_REG1_ADDR 0x20 /* Control register 1 */ -#define I3G4250D_CTRL_REG2_ADDR 0x21 /* Control register 2 */ -#define I3G4250D_CTRL_REG3_ADDR 0x22 /* Control register 3 */ -#define I3G4250D_CTRL_REG4_ADDR 0x23 /* Control register 4 */ -#define I3G4250D_CTRL_REG5_ADDR 0x24 /* Control register 5 */ -#define I3G4250D_REFERENCE_REG_ADDR 0x25 /* Reference register */ -#define I3G4250D_OUT_TEMP_ADDR 0x26 /* Out temp register */ -#define I3G4250D_STATUS_REG_ADDR 0x27 /* Status register */ -#define I3G4250D_OUT_X_L_ADDR 0x28 /* Output Register X */ -#define I3G4250D_OUT_X_H_ADDR 0x29 /* Output Register X */ -#define I3G4250D_OUT_Y_L_ADDR 0x2A /* Output Register Y */ -#define I3G4250D_OUT_Y_H_ADDR 0x2B /* Output Register Y */ -#define I3G4250D_OUT_Z_L_ADDR 0x2C /* Output Register Z */ -#define I3G4250D_OUT_Z_H_ADDR 0x2D /* Output Register Z */ -#define I3G4250D_FIFO_CTRL_REG_ADDR 0x2E /* Fifo control Register */ -#define I3G4250D_FIFO_SRC_REG_ADDR 0x2F /* Fifo src Register */ - -#define I3G4250D_INT1_CFG_ADDR 0x30 /* Interrupt 1 configuration Register */ -#define I3G4250D_INT1_SRC_ADDR 0x31 /* Interrupt 1 source Register */ -#define I3G4250D_INT1_TSH_XH_ADDR 0x32 /* Interrupt 1 Threshold X register */ -#define I3G4250D_INT1_TSH_XL_ADDR 0x33 /* Interrupt 1 Threshold X register */ -#define I3G4250D_INT1_TSH_YH_ADDR 0x34 /* Interrupt 1 Threshold Y register */ -#define I3G4250D_INT1_TSH_YL_ADDR 0x35 /* Interrupt 1 Threshold Y register */ -#define I3G4250D_INT1_TSH_ZH_ADDR 0x36 /* Interrupt 1 Threshold Z register */ -#define I3G4250D_INT1_TSH_ZL_ADDR 0x37 /* Interrupt 1 Threshold Z register */ -#define I3G4250D_INT1_DURATION_ADDR 0x38 /* Interrupt 1 DURATION register */ - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ - -#define I_AM_I3G4250D ((uint8_t)0xD3) - -/** @defgroup Power_Mode_selection Power Mode selection - * @{ - */ -#define I3G4250D_MODE_POWERDOWN ((uint8_t)0x00) -#define I3G4250D_MODE_ACTIVE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup OutPut_DataRate_Selection OutPut DataRate Selection - * @{ - */ -#define I3G4250D_OUTPUT_DATARATE_1 ((uint8_t)0x00) -#define I3G4250D_OUTPUT_DATARATE_2 ((uint8_t)0x40) -#define I3G4250D_OUTPUT_DATARATE_3 ((uint8_t)0x80) -#define I3G4250D_OUTPUT_DATARATE_4 ((uint8_t)0xC0) -/** - * @} - */ - -/** @defgroup Axes_Selection Axes Selection - * @{ - */ -#define I3G4250D_X_ENABLE ((uint8_t)0x02) -#define I3G4250D_Y_ENABLE ((uint8_t)0x01) -#define I3G4250D_Z_ENABLE ((uint8_t)0x04) -#define I3G4250D_AXES_ENABLE ((uint8_t)0x07) -#define I3G4250D_AXES_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Bandwidth_Selection Bandwidth Selection - * @{ - */ -#define I3G4250D_BANDWIDTH_1 ((uint8_t)0x00) -#define I3G4250D_BANDWIDTH_2 ((uint8_t)0x10) -#define I3G4250D_BANDWIDTH_3 ((uint8_t)0x20) -#define I3G4250D_BANDWIDTH_4 ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Full_Scale_Selection Full Scale Selection - * @{ - */ -#define I3G4250D_FULLSCALE_245 ((uint8_t)0x00) -#define I3G4250D_FULLSCALE_500 ((uint8_t)0x10) -#define I3G4250D_FULLSCALE_2000 ((uint8_t)0x20) -#define I3G4250D_FULLSCALE_SELECTION ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Full_Scale_Sensitivity Full Scale Sensitivity - * @{ - */ -#define I3G4250D_SENSITIVITY_245DPS ((float)8.75f) /*!< gyroscope sensitivity with 250 dps full scale [DPS/LSB] */ -#define I3G4250D_SENSITIVITY_500DPS ((float)17.50f) /*!< gyroscope sensitivity with 500 dps full scale [DPS/LSB] */ -#define I3G4250D_SENSITIVITY_2000DPS ((float)70.00f) /*!< gyroscope sensitivity with 2000 dps full scale [DPS/LSB] */ -/** - * @} - */ - - -/** @defgroup Block_Data_Update Block Data Update - * @{ - */ -#define I3G4250D_BlockDataUpdate_Continous ((uint8_t)0x00) -#define I3G4250D_BlockDataUpdate_Single ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Endian_Data_selection Endian Data selection - * @{ - */ -#define I3G4250D_BLE_LSB ((uint8_t)0x00) -#define I3G4250D_BLE_MSB ((uint8_t)0x40) -/** - * @} - */ - -/** @defgroup High_Pass_Filter_status High Pass Filter status - * @{ - */ -#define I3G4250D_HIGHPASSFILTER_DISABLE ((uint8_t)0x00) -#define I3G4250D_HIGHPASSFILTER_ENABLE ((uint8_t)0x10) -/** - * @} - */ - -/** @defgroup INT1_INT2_selection Selection - * @{ - */ -#define I3G4250D_INT1 ((uint8_t)0x00) -#define I3G4250D_INT2 ((uint8_t)0x01) -/** - * @} - */ - -/** @defgroup INT1_Interrupt_status Interrupt Status - * @{ - */ -#define I3G4250D_INT1INTERRUPT_DISABLE ((uint8_t)0x00) -#define I3G4250D_INT1INTERRUPT_ENABLE ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup INT2_Interrupt_status Interrupt Status - * @{ - */ -#define I3G4250D_INT2INTERRUPT_DISABLE ((uint8_t)0x00) -#define I3G4250D_INT2INTERRUPT_ENABLE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup INT1_Interrupt_ActiveEdge Interrupt Active Edge - * @{ - */ -#define I3G4250D_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20) -#define I3G4250D_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Boot_Mode_selection Boot Mode Selection - * @{ - */ -#define I3G4250D_BOOT_NORMALMODE ((uint8_t)0x00) -#define I3G4250D_BOOT_REBOOTMEMORY ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup High_Pass_Filter_Mode High Pass Filter Mode - * @{ - */ -#define I3G4250D_HPM_NORMAL_MODE_RES ((uint8_t)0x00) -#define I3G4250D_HPM_REF_SIGNAL ((uint8_t)0x10) -#define I3G4250D_HPM_NORMAL_MODE ((uint8_t)0x20) -#define I3G4250D_HPM_AUTORESET_INT ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup High_Pass_CUT OFF_Frequency High Pass CUT OFF Frequency - * @{ - */ -#define I3G4250D_HPFCF_0 0x00 -#define I3G4250D_HPFCF_1 0x01 -#define I3G4250D_HPFCF_2 0x02 -#define I3G4250D_HPFCF_3 0x03 -#define I3G4250D_HPFCF_4 0x04 -#define I3G4250D_HPFCF_5 0x05 -#define I3G4250D_HPFCF_6 0x06 -#define I3G4250D_HPFCF_7 0x07 -#define I3G4250D_HPFCF_8 0x08 -#define I3G4250D_HPFCF_9 0x09 -/** - * @} - */ - -/** - * @} - */ -/** @defgroup I3G4250D_Exported_Functions Exported Functions - * @{ - */ -/* Sensor Configuration Functions */ -void I3G4250D_Init(uint16_t InitStruct); -void I3G4250D_DeInit(void); -void I3G4250D_LowPower(uint16_t InitStruct); -uint8_t I3G4250D_ReadID(void); -void I3G4250D_RebootCmd(void); - -/* Interrupt Configuration Functions */ -void I3G4250D_INT1InterruptConfig(uint16_t Int1Config); -void I3G4250D_EnableIT(uint8_t IntSel); -void I3G4250D_DisableIT(uint8_t IntSel); - -/* High Pass Filter Configuration Functions */ -void I3G4250D_FilterConfig(uint8_t FilterStruct); -void I3G4250D_FilterCmd(uint8_t HighPassFilterState); -void I3G4250D_ReadXYZAngRate(float *pfData); -uint8_t I3G4250D_GetDataStatus(void); - -/* Gyroscope IO functions */ -void GYRO_IO_Init(void); -void GYRO_IO_DeInit(void); -void GYRO_IO_Write(uint8_t *pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite); -void GYRO_IO_Read(uint8_t *pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead); - -/* Gyroscope driver structure */ -extern GYRO_DrvTypeDef I3g4250Drv; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __I3G4250D_H */ diff --git a/Drivers/BSP/Components/ili9325 b/Drivers/BSP/Components/ili9325 new file mode 160000 index 0000000000..d5f94fe651 --- /dev/null +++ b/Drivers/BSP/Components/ili9325 @@ -0,0 +1 @@ +Subproject commit d5f94fe651497c7d5ba542fe9a19b5b473bfdc92 diff --git a/Drivers/BSP/Components/ili9325/LICENSE.md b/Drivers/BSP/Components/ili9325/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ili9325/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ili9325/Release_Notes.html b/Drivers/BSP/Components/ili9325/Release_Notes.html deleted file mode 100644 index 8a48e3a386..0000000000 --- a/Drivers/BSP/Components/ili9325/Release_Notes.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - Release Notes for ILI9325 Component Driver - - - - - - -
-
-
-

Release Notes for

-

ILI9325 Component Driver

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the ILI9325 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • ili9325.c: alignment with BSP STM32446E_EVAL V1.1.2 and BSP STM324xG_EVAL V2.2.2 -
      -
    • Update ili9325_ReadPixel() and ili9325_ReadReg() to support the new LCD_IO_ReadData() API
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • ili9325.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Official Final Release for LCD Controllers harmonization
  • -
  • Replace LCD_IO_WriteData() by LCD_IO_WriteMultipleData() to be compliant with SPI interface
  • -
  • Warning : break compatibility with old BSP common files - done for STM3210C-EVAL board
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Final Official Release for LCD Controller harmonization
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Beta Release to change the usage of LCD_IO_ReadData
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Align driver with the STM32Cube BSP architecture by removing check for initialization in ili9325_Init()
  • -
  • Initializes only the LCD IO in read ID APIs instead of all initialization sequence and remove the check for initialization in ili9325_ReadID() function
  • -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ili9325/_htmresc/favicon.png b/Drivers/BSP/Components/ili9325/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ili9325/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ili9325/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ili9325/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ili9325/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ili9325/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ili9325/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ili9325/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ili9325/ili9325.c b/Drivers/BSP/Components/ili9325/ili9325.c deleted file mode 100644 index 7bbf217a5b..0000000000 --- a/Drivers/BSP/Components/ili9325/ili9325.c +++ /dev/null @@ -1,499 +0,0 @@ -/** - ****************************************************************************** - * @file ili9325.c - * @author MCD Application Team - * @version V1.2.3 - * @date 03-May-2016 - * @brief This file includes the LCD driver for ILI9325 LCD. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ili9325.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ili9325 - * @brief This file provides a set of functions needed to drive the - * ILI9325 LCD. - * @{ - */ - -/** @defgroup ILI9325_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9325_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9325_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9325_Private_Variables - * @{ - */ -LCD_DrvTypeDef ili9325_drv = -{ - ili9325_Init, - ili9325_ReadID, - ili9325_DisplayOn, - ili9325_DisplayOff, - ili9325_SetCursor, - ili9325_WritePixel, - ili9325_ReadPixel, - ili9325_SetDisplayWindow, - ili9325_DrawHLine, - ili9325_DrawVLine, - ili9325_GetLcdPixelWidth, - ili9325_GetLcdPixelHeight, - ili9325_DrawBitmap, - ili9325_DrawRGBImage, -}; - -static uint16_t ArrayRGB[320] = {0}; -/** - * @} - */ - -/** @defgroup ILI9325_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9325_Private_Functions - * @{ - */ - -/** - * @brief Initialize the ILI9325 LCD Component. - * @param None - * @retval None - */ -void ili9325_Init(void) -{ - /* Initialize ILI9325 low level bus layer ----------------------------------*/ - LCD_IO_Init(); - - /* Start Initial Sequence --------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_0, 0x0001); /* Start internal OSC. */ - ili9325_WriteReg(LCD_REG_1, 0x0100); /* Set SS and SM bit */ - ili9325_WriteReg(LCD_REG_2, 0x0700); /* Set 1 line inversion */ - ili9325_WriteReg(LCD_REG_3, 0x1018); /* Set GRAM write direction and BGR=1. */ - ili9325_WriteReg(LCD_REG_4, 0x0000); /* Resize register */ - ili9325_WriteReg(LCD_REG_8, 0x0202); /* Set the back porch and front porch */ - ili9325_WriteReg(LCD_REG_9, 0x0000); /* Set non-display area refresh cycle ISC[3:0] */ - ili9325_WriteReg(LCD_REG_10, 0x0000); /* FMARK function */ - ili9325_WriteReg(LCD_REG_12, 0x0000); /* RGB interface setting */ - ili9325_WriteReg(LCD_REG_13, 0x0000); /* Frame marker Position */ - ili9325_WriteReg(LCD_REG_15, 0x0000); /* RGB interface polarity */ - - /* Power On sequence -------------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ - ili9325_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ - ili9325_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ - ili9325_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude */ - - ili9325_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ - ili9325_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ - - ili9325_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ - - ili9325_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ - ili9325_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ - - ili9325_WriteReg(LCD_REG_32, 0x0000); /* GRAM horizontal Address */ - ili9325_WriteReg(LCD_REG_33, 0x0000); /* GRAM Vertical Address */ - - /* Adjust the Gamma Curve (ILI9325) ----------------------------------------*/ - ili9325_WriteReg(LCD_REG_48, 0x0007); - ili9325_WriteReg(LCD_REG_49, 0x0302); - ili9325_WriteReg(LCD_REG_50, 0x0105); - ili9325_WriteReg(LCD_REG_53, 0x0206); - ili9325_WriteReg(LCD_REG_54, 0x0808); - ili9325_WriteReg(LCD_REG_55, 0x0206); - ili9325_WriteReg(LCD_REG_56, 0x0504); - ili9325_WriteReg(LCD_REG_57, 0x0007); - ili9325_WriteReg(LCD_REG_60, 0x0105); - ili9325_WriteReg(LCD_REG_61, 0x0808); - - /* Set GRAM area -----------------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */ - ili9325_WriteReg(LCD_REG_81, 0x00EF); /* Horizontal GRAM End Address */ - ili9325_WriteReg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */ - ili9325_WriteReg(LCD_REG_83, 0x013F); /* Vertical GRAM End Address */ - - ili9325_WriteReg(LCD_REG_96, 0xA700); /* Gate Scan Line(GS=1, scan direction is G320~G1) */ - ili9325_WriteReg(LCD_REG_97, 0x0001); /* NDL,VLE, REV */ - ili9325_WriteReg(LCD_REG_106, 0x0000); /* set scrolling line */ - - /* Partial Display Control -------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_128, 0x0000); - ili9325_WriteReg(LCD_REG_129, 0x0000); - ili9325_WriteReg(LCD_REG_130, 0x0000); - ili9325_WriteReg(LCD_REG_131, 0x0000); - ili9325_WriteReg(LCD_REG_132, 0x0000); - ili9325_WriteReg(LCD_REG_133, 0x0000); - - /* Panel Control -----------------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_144, 0x0010); - ili9325_WriteReg(LCD_REG_146, 0x0000); - ili9325_WriteReg(LCD_REG_147, 0x0003); - ili9325_WriteReg(LCD_REG_149, 0x0110); - ili9325_WriteReg(LCD_REG_151, 0x0000); - ili9325_WriteReg(LCD_REG_152, 0x0000); - - /* set GRAM write direction and BGR = 1 */ - /* I/D=00 (Horizontal : increment, Vertical : decrement) */ - /* AM=1 (address is updated in vertical writing direction) */ - ili9325_WriteReg(LCD_REG_3, 0x1018); - - /* 262K color and display ON */ - ili9325_WriteReg(LCD_REG_7, 0x0173); - - /* Set the Cursor */ - ili9325_SetCursor(0, 0); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); -} - -/** - * @brief Enables the Display. - * @param None - * @retval None - */ -void ili9325_DisplayOn(void) -{ - /* Power On sequence -------------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ - ili9325_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ - ili9325_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ - ili9325_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/ - - ili9325_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ - ili9325_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */ - - ili9325_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */ - - ili9325_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */ - ili9325_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */ - - /* Display On */ - ili9325_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */ -} - -/** - * @brief Disables the Display. - * @param None - * @retval None - */ -void ili9325_DisplayOff(void) -{ - /* Power Off sequence ------------------------------------------------------*/ - ili9325_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */ - ili9325_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */ - ili9325_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */ - ili9325_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/ - - ili9325_WriteReg(LCD_REG_41, 0x0000); /* VCM[4:0] for VCOMH */ - - /* Display Off */ - ili9325_WriteReg(LCD_REG_7, 0x0); -} - -/** - * @brief Get the LCD pixel Width. - * @param None - * @retval The Lcd Pixel Width - */ -uint16_t ili9325_GetLcdPixelWidth(void) -{ - return (uint16_t)320; -} - -/** - * @brief Get the LCD pixel Height. - * @param None - * @retval The Lcd Pixel Height - */ -uint16_t ili9325_GetLcdPixelHeight(void) -{ - return (uint16_t)240; -} - -/** - * @brief Get the ILI9325 ID. - * @param None - * @retval The ILI9325 ID - */ -uint16_t ili9325_ReadID(void) -{ - LCD_IO_Init(); - return (ili9325_ReadReg(0x00)); -} - -/** - * @brief Set Cursor position. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval None - */ -void ili9325_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - ili9325_WriteReg(LCD_REG_32, Ypos); - ili9325_WriteReg(LCD_REG_33, (ILI9325_LCD_PIXEL_WIDTH - 1 - Xpos)); -} - -/** - * @brief Write pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param RGBCode: the RGB pixel color - * @retval None - */ -void ili9325_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode) -{ - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); - - /* Write 16-bit GRAM Reg */ - LCD_IO_WriteMultipleData((uint8_t*)&RGBCode, 2); -} - -/** - * @brief Read pixel. - * @param None - * @retval The RGB pixel color - */ -uint16_t ili9325_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Read 16-bit Reg */ - return (LCD_IO_ReadData(LCD_REG_34)); -} - -/** - * @brief Writes to the selected LCD register. - * @param LCDReg: Address of the selected register. - * @param LCDRegValue: Value to write to the selected register. - * @retval None - */ -void ili9325_WriteReg(uint8_t LCDReg, uint16_t LCDRegValue) -{ - LCD_IO_WriteReg(LCDReg); - - /* Write 16-bit GRAM Reg */ - LCD_IO_WriteMultipleData((uint8_t*)&LCDRegValue, 2); -} - -/** - * @brief Reads the selected LCD Register. - * @param LCDReg: address of the selected register. - * @retval LCD Register Value. - */ -uint16_t ili9325_ReadReg(uint8_t LCDReg) -{ - /* Read 16-bit Reg */ - return (LCD_IO_ReadData(LCDReg)); -} - -/** - * @brief Sets a display window - * @param Xpos: specifies the X bottom left position. - * @param Ypos: specifies the Y bottom left position. - * @param Height: display window height. - * @param Width: display window width. - * @retval None - */ -void ili9325_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Horizontal GRAM Start Address */ - ili9325_WriteReg(LCD_REG_80, (Ypos)); - /* Horizontal GRAM End Address */ - ili9325_WriteReg(LCD_REG_81, (Ypos + Height - 1)); - - /* Vertical GRAM Start Address */ - ili9325_WriteReg(LCD_REG_82, ILI9325_LCD_PIXEL_WIDTH - Xpos - Width); - /* Vertical GRAM End Address */ - ili9325_WriteReg(LCD_REG_83, ILI9325_LCD_PIXEL_WIDTH - Xpos - 1); -} - -/** - * @brief Draw vertical line. - * @param RGBCode: Specifies the RGB color - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param Length: specifies the Line length. - * @retval None - */ -void ili9325_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint16_t counter = 0; - - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); - - /* Sent a complete line */ - for(counter = 0; counter < Length; counter++) - { - ArrayRGB[counter] = RGBCode; - } - - LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2); -} - -/** - * @brief Draw vertical line. - * @param RGBCode: Specifies the RGB color - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param Length: specifies the Line length. - * @retval None - */ -void ili9325_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint16_t counter = 0; - - /* set GRAM write direction and BGR = 1 */ - /* I/D=00 (Horizontal : increment, Vertical : decrement) */ - /* AM=1 (address is updated in vertical writing direction) */ - ili9325_WriteReg(LCD_REG_3, 0x1010); - - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); - - /* Fill a complete vertical line */ - for(counter = 0; counter < Length; counter++) - { - ArrayRGB[counter] = RGBCode; - } - - /* Write 16-bit GRAM Reg */ - LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2); - - /* set GRAM write direction and BGR = 1 */ - /* I/D=00 (Horizontal : increment, Vertical : decrement) */ - /* AM=1 (address is updated in vertical writing direction) */ - ili9325_WriteReg(LCD_REG_3, 0x1018); -} - -/** - * @brief Displays a bitmap picture. - * @param BmpAddress: Bmp picture address. - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @retval None - */ -void ili9325_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, size = 0; - /* Read bitmap size */ - size = *(volatile uint16_t *) (pbmp + 2); - size |= (*(volatile uint16_t *) (pbmp + 4)) << 16; - /* Get bitmap data address offset */ - index = *(volatile uint16_t *) (pbmp + 10); - index |= (*(volatile uint16_t *) (pbmp + 12)) << 16; - size = (size - index)/2; - pbmp += index; - /* Set GRAM write direction and BGR = 1 */ - /* I/D=00 (Horizontal : decrement, Vertical : decrement) */ - /* AM=1 (address is updated in vertical writing direction) */ - ili9325_WriteReg(LCD_REG_3, 0x1008); - - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); - - LCD_IO_WriteMultipleData((uint8_t*)pbmp, size*2); - - /* Set GRAM write direction and BGR = 1 */ - /* I/D = 01 (Horizontal : increment, Vertical : decrement) */ - /* AM = 1 (address is updated in vertical writing direction) */ - ili9325_WriteReg(LCD_REG_3, 0x1018); -} - -/** - * @brief Displays picture. - * @param pdata: picture address. - * @param Xpos: Image X position in the LCD - * @param Ypos: Image Y position in the LCD - * @param Xsize: Image X size in the LCD - * @param Ysize: Image Y size in the LCD - * @retval None - */ -void ili9325_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - uint32_t size = 0; - - size = (Xsize * Ysize); - - /* Set Cursor */ - ili9325_SetCursor(Xpos, Ypos); - - /* Prepare to write GRAM */ - LCD_IO_WriteReg(LCD_REG_34); - - LCD_IO_WriteMultipleData((uint8_t*)pdata, size*2); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ili9325/ili9325.h b/Drivers/BSP/Components/ili9325/ili9325.h deleted file mode 100644 index 26ba834460..0000000000 --- a/Drivers/BSP/Components/ili9325/ili9325.h +++ /dev/null @@ -1,237 +0,0 @@ -/** - ****************************************************************************** - * @file ili9325.h - * @author MCD Application Team - * @version V1.2.3 - * @date 04-May-2016 - * @brief This file contains all the functions prototypes for the ili9325.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __ILI9325_H -#define __ILI9325_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/lcd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ili9325 - * @{ - */ - -/** @defgroup ILI9325_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9325_Exported_Constants - * @{ - */ -/** - * @brief ILI9325 ID - */ -#define ILI9325_ID 0x9325 - -/** - * @brief ILI9325 Size - */ -#define ILI9325_LCD_PIXEL_WIDTH ((uint16_t)320) -#define ILI9325_LCD_PIXEL_HEIGHT ((uint16_t)240) - -/** - * @brief ILI9325 Registers - */ -#define LCD_REG_0 0x00 -#define LCD_REG_1 0x01 -#define LCD_REG_2 0x02 -#define LCD_REG_3 0x03 -#define LCD_REG_4 0x04 -#define LCD_REG_5 0x05 -#define LCD_REG_6 0x06 -#define LCD_REG_7 0x07 -#define LCD_REG_8 0x08 -#define LCD_REG_9 0x09 -#define LCD_REG_10 0x0A -#define LCD_REG_12 0x0C -#define LCD_REG_13 0x0D -#define LCD_REG_14 0x0E -#define LCD_REG_15 0x0F -#define LCD_REG_16 0x10 -#define LCD_REG_17 0x11 -#define LCD_REG_18 0x12 -#define LCD_REG_19 0x13 -#define LCD_REG_20 0x14 -#define LCD_REG_21 0x15 -#define LCD_REG_22 0x16 -#define LCD_REG_23 0x17 -#define LCD_REG_24 0x18 -#define LCD_REG_25 0x19 -#define LCD_REG_26 0x1A -#define LCD_REG_27 0x1B -#define LCD_REG_28 0x1C -#define LCD_REG_29 0x1D -#define LCD_REG_30 0x1E -#define LCD_REG_31 0x1F -#define LCD_REG_32 0x20 -#define LCD_REG_33 0x21 -#define LCD_REG_34 0x22 -#define LCD_REG_36 0x24 -#define LCD_REG_37 0x25 -#define LCD_REG_40 0x28 -#define LCD_REG_41 0x29 -#define LCD_REG_43 0x2B -#define LCD_REG_45 0x2D -#define LCD_REG_48 0x30 -#define LCD_REG_49 0x31 -#define LCD_REG_50 0x32 -#define LCD_REG_51 0x33 -#define LCD_REG_52 0x34 -#define LCD_REG_53 0x35 -#define LCD_REG_54 0x36 -#define LCD_REG_55 0x37 -#define LCD_REG_56 0x38 -#define LCD_REG_57 0x39 -#define LCD_REG_58 0x3A -#define LCD_REG_59 0x3B -#define LCD_REG_60 0x3C -#define LCD_REG_61 0x3D -#define LCD_REG_62 0x3E -#define LCD_REG_63 0x3F -#define LCD_REG_64 0x40 -#define LCD_REG_65 0x41 -#define LCD_REG_66 0x42 -#define LCD_REG_67 0x43 -#define LCD_REG_68 0x44 -#define LCD_REG_69 0x45 -#define LCD_REG_70 0x46 -#define LCD_REG_71 0x47 -#define LCD_REG_72 0x48 -#define LCD_REG_73 0x49 -#define LCD_REG_74 0x4A -#define LCD_REG_75 0x4B -#define LCD_REG_76 0x4C -#define LCD_REG_77 0x4D -#define LCD_REG_78 0x4E -#define LCD_REG_79 0x4F -#define LCD_REG_80 0x50 -#define LCD_REG_81 0x51 -#define LCD_REG_82 0x52 -#define LCD_REG_83 0x53 -#define LCD_REG_96 0x60 -#define LCD_REG_97 0x61 -#define LCD_REG_106 0x6A -#define LCD_REG_118 0x76 -#define LCD_REG_128 0x80 -#define LCD_REG_129 0x81 -#define LCD_REG_130 0x82 -#define LCD_REG_131 0x83 -#define LCD_REG_132 0x84 -#define LCD_REG_133 0x85 -#define LCD_REG_134 0x86 -#define LCD_REG_135 0x87 -#define LCD_REG_136 0x88 -#define LCD_REG_137 0x89 -#define LCD_REG_139 0x8B -#define LCD_REG_140 0x8C -#define LCD_REG_141 0x8D -#define LCD_REG_143 0x8F -#define LCD_REG_144 0x90 -#define LCD_REG_145 0x91 -#define LCD_REG_146 0x92 -#define LCD_REG_147 0x93 -#define LCD_REG_148 0x94 -#define LCD_REG_149 0x95 -#define LCD_REG_150 0x96 -#define LCD_REG_151 0x97 -#define LCD_REG_152 0x98 -#define LCD_REG_153 0x99 -#define LCD_REG_154 0x9A -#define LCD_REG_157 0x9D -#define LCD_REG_192 0xC0 -#define LCD_REG_193 0xC1 -#define LCD_REG_229 0xE5 -/** - * @} - */ - -/** @defgroup ILI9325_Exported_Functions - * @{ - */ -void ili9325_Init(void); -uint16_t ili9325_ReadID(void); -void ili9325_WriteReg(uint8_t LCDReg, uint16_t LCDRegValue); -uint16_t ili9325_ReadReg(uint8_t LCDReg); - -void ili9325_DisplayOn(void); -void ili9325_DisplayOff(void); -void ili9325_SetCursor(uint16_t Xpos, uint16_t Ypos); -void ili9325_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode); -uint16_t ili9325_ReadPixel(uint16_t Xpos, uint16_t Ypos); - -void ili9325_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ili9325_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ili9325_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void ili9325_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata); - -void ili9325_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); - - -uint16_t ili9325_GetLcdPixelWidth(void); -uint16_t ili9325_GetLcdPixelHeight(void); - -/* LCD driver structure */ -extern LCD_DrvTypeDef ili9325_drv; - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size); -void LCD_IO_WriteReg(uint8_t Reg); -uint16_t LCD_IO_ReadData(uint16_t Reg); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __ILI9325_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ili9341 b/Drivers/BSP/Components/ili9341 new file mode 160000 index 0000000000..c44184fc67 --- /dev/null +++ b/Drivers/BSP/Components/ili9341 @@ -0,0 +1 @@ +Subproject commit c44184fc674dcea7f52597994ad009627d475186 diff --git a/Drivers/BSP/Components/ili9341/LICENSE.md b/Drivers/BSP/Components/ili9341/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ili9341/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ili9341/Release_Notes.html b/Drivers/BSP/Components/ili9341/Release_Notes.html deleted file mode 100644 index 39aff2746f..0000000000 --- a/Drivers/BSP/Components/ili9341/Release_Notes.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - Release Notes for ILI9341 Component Driver - - - - - - -
-
-
-

Release Notes for

-

ILI9341 Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the ILI9341 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • ili9341.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Align driver with the STM32Cube BSP architecture by removing check for initialization in ili9341_Init()
  • -
  • Initializes only the LCD IO in read ID APIs instead of all initialization sequence and remove the check for initialization in ili9341_ReadID() function
  • -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ili9341/_htmresc/favicon.png b/Drivers/BSP/Components/ili9341/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ili9341/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ili9341/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ili9341/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ili9341/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ili9341/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ili9341/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ili9341/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ili9341/ili9341.c b/Drivers/BSP/Components/ili9341/ili9341.c deleted file mode 100644 index 100533b56b..0000000000 --- a/Drivers/BSP/Components/ili9341/ili9341.c +++ /dev/null @@ -1,327 +0,0 @@ -/** - ****************************************************************************** - * @file ili9341.c - * @author MCD Application Team - * @version V1.0.2 - * @date 02-December-2014 - * @brief This file includes the LCD driver for ILI9341 LCD. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ili9341.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ILI9341 - * @brief This file provides a set of functions needed to drive the - * ILI9341 LCD. - * @{ - */ - -/** @defgroup ILI9341_Private_TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup ILI9341_Private_Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup ILI9341_Private_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup ILI9341_Private_Variables - * @{ - */ - -LCD_DrvTypeDef ili9341_drv = -{ - ili9341_Init, - ili9341_ReadID, - ili9341_DisplayOn, - ili9341_DisplayOff, - 0, - 0, - 0, - 0, - 0, - 0, - ili9341_GetLcdPixelWidth, - ili9341_GetLcdPixelHeight, - 0, - 0, -}; - -/** - * @} - */ - -/** @defgroup ILI9341_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup ILI9341_Private_Functions - * @{ - */ - -/** - * @brief Power on the LCD. - * @param None - * @retval None - */ -void ili9341_Init(void) -{ - /* Initialize ILI9341 low level bus layer ----------------------------------*/ - LCD_IO_Init(); - - /* Configure LCD */ - ili9341_WriteReg(0xCA); - ili9341_WriteData(0xC3); - ili9341_WriteData(0x08); - ili9341_WriteData(0x50); - ili9341_WriteReg(LCD_POWERB); - ili9341_WriteData(0x00); - ili9341_WriteData(0xC1); - ili9341_WriteData(0x30); - ili9341_WriteReg(LCD_POWER_SEQ); - ili9341_WriteData(0x64); - ili9341_WriteData(0x03); - ili9341_WriteData(0x12); - ili9341_WriteData(0x81); - ili9341_WriteReg(LCD_DTCA); - ili9341_WriteData(0x85); - ili9341_WriteData(0x00); - ili9341_WriteData(0x78); - ili9341_WriteReg(LCD_POWERA); - ili9341_WriteData(0x39); - ili9341_WriteData(0x2C); - ili9341_WriteData(0x00); - ili9341_WriteData(0x34); - ili9341_WriteData(0x02); - ili9341_WriteReg(LCD_PRC); - ili9341_WriteData(0x20); - ili9341_WriteReg(LCD_DTCB); - ili9341_WriteData(0x00); - ili9341_WriteData(0x00); - ili9341_WriteReg(LCD_FRMCTR1); - ili9341_WriteData(0x00); - ili9341_WriteData(0x1B); - ili9341_WriteReg(LCD_DFC); - ili9341_WriteData(0x0A); - ili9341_WriteData(0xA2); - ili9341_WriteReg(LCD_POWER1); - ili9341_WriteData(0x10); - ili9341_WriteReg(LCD_POWER2); - ili9341_WriteData(0x10); - ili9341_WriteReg(LCD_VCOM1); - ili9341_WriteData(0x45); - ili9341_WriteData(0x15); - ili9341_WriteReg(LCD_VCOM2); - ili9341_WriteData(0x90); - ili9341_WriteReg(LCD_MAC); - ili9341_WriteData(0xC8); - ili9341_WriteReg(LCD_3GAMMA_EN); - ili9341_WriteData(0x00); - ili9341_WriteReg(LCD_RGB_INTERFACE); - ili9341_WriteData(0xC2); - ili9341_WriteReg(LCD_DFC); - ili9341_WriteData(0x0A); - ili9341_WriteData(0xA7); - ili9341_WriteData(0x27); - ili9341_WriteData(0x04); - - /* Colomn address set */ - ili9341_WriteReg(LCD_COLUMN_ADDR); - ili9341_WriteData(0x00); - ili9341_WriteData(0x00); - ili9341_WriteData(0x00); - ili9341_WriteData(0xEF); - /* Page address set */ - ili9341_WriteReg(LCD_PAGE_ADDR); - ili9341_WriteData(0x00); - ili9341_WriteData(0x00); - ili9341_WriteData(0x01); - ili9341_WriteData(0x3F); - ili9341_WriteReg(LCD_INTERFACE); - ili9341_WriteData(0x01); - ili9341_WriteData(0x00); - ili9341_WriteData(0x06); - - ili9341_WriteReg(LCD_GRAM); - LCD_Delay(200); - - ili9341_WriteReg(LCD_GAMMA); - ili9341_WriteData(0x01); - - ili9341_WriteReg(LCD_PGAMMA); - ili9341_WriteData(0x0F); - ili9341_WriteData(0x29); - ili9341_WriteData(0x24); - ili9341_WriteData(0x0C); - ili9341_WriteData(0x0E); - ili9341_WriteData(0x09); - ili9341_WriteData(0x4E); - ili9341_WriteData(0x78); - ili9341_WriteData(0x3C); - ili9341_WriteData(0x09); - ili9341_WriteData(0x13); - ili9341_WriteData(0x05); - ili9341_WriteData(0x17); - ili9341_WriteData(0x11); - ili9341_WriteData(0x00); - ili9341_WriteReg(LCD_NGAMMA); - ili9341_WriteData(0x00); - ili9341_WriteData(0x16); - ili9341_WriteData(0x1B); - ili9341_WriteData(0x04); - ili9341_WriteData(0x11); - ili9341_WriteData(0x07); - ili9341_WriteData(0x31); - ili9341_WriteData(0x33); - ili9341_WriteData(0x42); - ili9341_WriteData(0x05); - ili9341_WriteData(0x0C); - ili9341_WriteData(0x0A); - ili9341_WriteData(0x28); - ili9341_WriteData(0x2F); - ili9341_WriteData(0x0F); - - ili9341_WriteReg(LCD_SLEEP_OUT); - LCD_Delay(200); - ili9341_WriteReg(LCD_DISPLAY_ON); - /* GRAM start writing */ - ili9341_WriteReg(LCD_GRAM); -} - -/** - * @brief Disables the Display. - * @param None - * @retval LCD Register Value. - */ -uint16_t ili9341_ReadID(void) -{ - LCD_IO_Init(); - return ((uint16_t)ili9341_ReadData(LCD_READ_ID4, LCD_READ_ID4_SIZE)); -} - -/** - * @brief Enables the Display. - * @param None - * @retval None - */ -void ili9341_DisplayOn(void) -{ - /* Display On */ - ili9341_WriteReg(LCD_DISPLAY_ON); -} - -/** - * @brief Disables the Display. - * @param None - * @retval None - */ -void ili9341_DisplayOff(void) -{ - /* Display Off */ - ili9341_WriteReg(LCD_DISPLAY_OFF); -} - -/** - * @brief Writes to the selected LCD register. - * @param LCD_Reg: address of the selected register. - * @retval None - */ -void ili9341_WriteReg(uint8_t LCD_Reg) -{ - LCD_IO_WriteReg(LCD_Reg); -} - -/** - * @brief Writes data to the selected LCD register. - * @param LCD_Reg: address of the selected register. - * @retval None - */ -void ili9341_WriteData(uint16_t RegValue) -{ - LCD_IO_WriteData(RegValue); -} - -/** - * @brief Reads the selected LCD Register. - * @param RegValue: Address of the register to read - * @param ReadSize: Number of bytes to read - * @retval LCD Register Value. - */ -uint32_t ili9341_ReadData(uint16_t RegValue, uint8_t ReadSize) -{ - /* Read a max of 4 bytes */ - return (LCD_IO_ReadData(RegValue, ReadSize)); -} - -/** - * @brief Get LCD PIXEL WIDTH. - * @param None - * @retval LCD PIXEL WIDTH. - */ -uint16_t ili9341_GetLcdPixelWidth(void) -{ - /* Return LCD PIXEL WIDTH */ - return ILI9341_LCD_PIXEL_WIDTH; -} - -/** - * @brief Get LCD PIXEL HEIGHT. - * @param None - * @retval LCD PIXEL HEIGHT. - */ -uint16_t ili9341_GetLcdPixelHeight(void) -{ - /* Return LCD PIXEL HEIGHT */ - return ILI9341_LCD_PIXEL_HEIGHT; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ili9341/ili9341.h b/Drivers/BSP/Components/ili9341/ili9341.h deleted file mode 100644 index 4bb9ab27c0..0000000000 --- a/Drivers/BSP/Components/ili9341/ili9341.h +++ /dev/null @@ -1,230 +0,0 @@ -/** - ****************************************************************************** - * @file ili9341.h - * @author MCD Application Team - * @version V1.0.2 - * @date 02-December-2014 - * @brief This file contains all the functions prototypes for the ili9341.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __ILI9341_H -#define __ILI9341_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/lcd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ILI9341 - * @{ - */ - -/** @defgroup ILI9341_Exported_Types - * @{ - */ -/** - * @} - */ - -/** @defgroup ILI9341_Exported_Constants - * @{ - */ - -/** - * @brief ILI9341 chip IDs - */ -#define ILI9341_ID 0x9341 - -/** - * @brief ILI9341 Size - */ -#define ILI9341_LCD_PIXEL_WIDTH ((uint16_t)240) -#define ILI9341_LCD_PIXEL_HEIGHT ((uint16_t)320) - -/** - * @brief ILI9341 Timing - */ -/* Timing configuration (Typical configuration from ILI9341 datasheet) - HSYNC=10 (9+1) - HBP=20 (29-10+1) - ActiveW=240 (269-20-10+1) - HFP=10 (279-240-20-10+1) - - VSYNC=2 (1+1) - VBP=2 (3-2+1) - ActiveH=320 (323-2-2+1) - VFP=4 (327-320-2-2+1) -*/ -#define ILI9341_HSYNC ((uint32_t)9) /* Horizontal synchronization */ -#define ILI9341_HBP ((uint32_t)29) /* Horizontal back porch */ -#define ILI9341_HFP ((uint32_t)2) /* Horizontal front porch */ -#define ILI9341_VSYNC ((uint32_t)1) /* Vertical synchronization */ -#define ILI9341_VBP ((uint32_t)3) /* Vertical back porch */ -#define ILI9341_VFP ((uint32_t)2) /* Vertical front porch */ - -/** - * @brief ILI9341 Registers - */ - -/* Level 1 Commands */ -#define LCD_SWRESET 0x01 /* Software Reset */ -#define LCD_READ_DISPLAY_ID 0x04 /* Read display identification information */ -#define LCD_RDDST 0x09 /* Read Display Status */ -#define LCD_RDDPM 0x0A /* Read Display Power Mode */ -#define LCD_RDDMADCTL 0x0B /* Read Display MADCTL */ -#define LCD_RDDCOLMOD 0x0C /* Read Display Pixel Format */ -#define LCD_RDDIM 0x0D /* Read Display Image Format */ -#define LCD_RDDSM 0x0E /* Read Display Signal Mode */ -#define LCD_RDDSDR 0x0F /* Read Display Self-Diagnostic Result */ -#define LCD_SPLIN 0x10 /* Enter Sleep Mode */ -#define LCD_SLEEP_OUT 0x11 /* Sleep out register */ -#define LCD_PTLON 0x12 /* Partial Mode ON */ -#define LCD_NORMAL_MODE_ON 0x13 /* Normal Display Mode ON */ -#define LCD_DINVOFF 0x20 /* Display Inversion OFF */ -#define LCD_DINVON 0x21 /* Display Inversion ON */ -#define LCD_GAMMA 0x26 /* Gamma register */ -#define LCD_DISPLAY_OFF 0x28 /* Display off register */ -#define LCD_DISPLAY_ON 0x29 /* Display on register */ -#define LCD_COLUMN_ADDR 0x2A /* Colomn address register */ -#define LCD_PAGE_ADDR 0x2B /* Page address register */ -#define LCD_GRAM 0x2C /* GRAM register */ -#define LCD_RGBSET 0x2D /* Color SET */ -#define LCD_RAMRD 0x2E /* Memory Read */ -#define LCD_PLTAR 0x30 /* Partial Area */ -#define LCD_VSCRDEF 0x33 /* Vertical Scrolling Definition */ -#define LCD_TEOFF 0x34 /* Tearing Effect Line OFF */ -#define LCD_TEON 0x35 /* Tearing Effect Line ON */ -#define LCD_MAC 0x36 /* Memory Access Control register*/ -#define LCD_VSCRSADD 0x37 /* Vertical Scrolling Start Address */ -#define LCD_IDMOFF 0x38 /* Idle Mode OFF */ -#define LCD_IDMON 0x39 /* Idle Mode ON */ -#define LCD_PIXEL_FORMAT 0x3A /* Pixel Format register */ -#define LCD_WRITE_MEM_CONTINUE 0x3C /* Write Memory Continue */ -#define LCD_READ_MEM_CONTINUE 0x3E /* Read Memory Continue */ -#define LCD_SET_TEAR_SCANLINE 0x44 /* Set Tear Scanline */ -#define LCD_GET_SCANLINE 0x45 /* Get Scanline */ -#define LCD_WDB 0x51 /* Write Brightness Display register */ -#define LCD_RDDISBV 0x52 /* Read Display Brightness */ -#define LCD_WCD 0x53 /* Write Control Display register*/ -#define LCD_RDCTRLD 0x54 /* Read CTRL Display */ -#define LCD_WRCABC 0x55 /* Write Content Adaptive Brightness Control */ -#define LCD_RDCABC 0x56 /* Read Content Adaptive Brightness Control */ -#define LCD_WRITE_CABC 0x5E /* Write CABC Minimum Brightness */ -#define LCD_READ_CABC 0x5F /* Read CABC Minimum Brightness */ -#define LCD_READ_ID1 0xDA /* Read ID1 */ -#define LCD_READ_ID2 0xDB /* Read ID2 */ -#define LCD_READ_ID3 0xDC /* Read ID3 */ - -/* Level 2 Commands */ -#define LCD_RGB_INTERFACE 0xB0 /* RGB Interface Signal Control */ -#define LCD_FRMCTR1 0xB1 /* Frame Rate Control (In Normal Mode) */ -#define LCD_FRMCTR2 0xB2 /* Frame Rate Control (In Idle Mode) */ -#define LCD_FRMCTR3 0xB3 /* Frame Rate Control (In Partial Mode) */ -#define LCD_INVTR 0xB4 /* Display Inversion Control */ -#define LCD_BPC 0xB5 /* Blanking Porch Control register */ -#define LCD_DFC 0xB6 /* Display Function Control register */ -#define LCD_ETMOD 0xB7 /* Entry Mode Set */ -#define LCD_BACKLIGHT1 0xB8 /* Backlight Control 1 */ -#define LCD_BACKLIGHT2 0xB9 /* Backlight Control 2 */ -#define LCD_BACKLIGHT3 0xBA /* Backlight Control 3 */ -#define LCD_BACKLIGHT4 0xBB /* Backlight Control 4 */ -#define LCD_BACKLIGHT5 0xBC /* Backlight Control 5 */ -#define LCD_BACKLIGHT7 0xBE /* Backlight Control 7 */ -#define LCD_BACKLIGHT8 0xBF /* Backlight Control 8 */ -#define LCD_POWER1 0xC0 /* Power Control 1 register */ -#define LCD_POWER2 0xC1 /* Power Control 2 register */ -#define LCD_VCOM1 0xC5 /* VCOM Control 1 register */ -#define LCD_VCOM2 0xC7 /* VCOM Control 2 register */ -#define LCD_NVMWR 0xD0 /* NV Memory Write */ -#define LCD_NVMPKEY 0xD1 /* NV Memory Protection Key */ -#define LCD_RDNVM 0xD2 /* NV Memory Status Read */ -#define LCD_READ_ID4 0xD3 /* Read ID4 */ -#define LCD_PGAMMA 0xE0 /* Positive Gamma Correction register */ -#define LCD_NGAMMA 0xE1 /* Negative Gamma Correction register */ -#define LCD_DGAMCTRL1 0xE2 /* Digital Gamma Control 1 */ -#define LCD_DGAMCTRL2 0xE3 /* Digital Gamma Control 2 */ -#define LCD_INTERFACE 0xF6 /* Interface control register */ - -/* Extend register commands */ -#define LCD_POWERA 0xCB /* Power control A register */ -#define LCD_POWERB 0xCF /* Power control B register */ -#define LCD_DTCA 0xE8 /* Driver timing control A */ -#define LCD_DTCB 0xEA /* Driver timing control B */ -#define LCD_POWER_SEQ 0xED /* Power on sequence register */ -#define LCD_3GAMMA_EN 0xF2 /* 3 Gamma enable register */ -#define LCD_PRC 0xF7 /* Pump ratio control register */ - -/* Size of read registers */ -#define LCD_READ_ID4_SIZE 3 /* Size of Read ID4 */ - -/** - * @} - */ - -/** @defgroup ILI9341_Exported_Functions - * @{ - */ -void ili9341_Init(void); -uint16_t ili9341_ReadID(void); -void ili9341_WriteReg(uint8_t LCD_Reg); -void ili9341_WriteData(uint16_t RegValue); -uint32_t ili9341_ReadData(uint16_t RegValue, uint8_t ReadSize); -void ili9341_DisplayOn(void); -void ili9341_DisplayOff(void); -uint16_t ili9341_GetLcdPixelWidth(void); -uint16_t ili9341_GetLcdPixelHeight(void); - -/* LCD driver structure */ -extern LCD_DrvTypeDef ili9341_drv; - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteData(uint16_t RegValue); -void LCD_IO_WriteReg(uint8_t Reg); -uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize); -void LCD_Delay (uint32_t delay); - -#ifdef __cplusplus -} -#endif - -#endif /* __ILI9341_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/l3gd20 b/Drivers/BSP/Components/l3gd20 new file mode 160000 index 0000000000..948eef083e --- /dev/null +++ b/Drivers/BSP/Components/l3gd20 @@ -0,0 +1 @@ +Subproject commit 948eef083e7347e77ca76df32080d0c759fda320 diff --git a/Drivers/BSP/Components/l3gd20/LICENSE.md b/Drivers/BSP/Components/l3gd20/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/l3gd20/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/l3gd20/Release_Notes.html b/Drivers/BSP/Components/l3gd20/Release_Notes.html deleted file mode 100644 index acc4681777..0000000000 --- a/Drivers/BSP/Components/l3gd20/Release_Notes.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - Release Notes for L3GD20 Component Drivers - - - - - - -
-
-
-

Release Notes for L3GD20 Component Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the L3GD20 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • l3gd20.h/.c: -
      -
    • Add gyroscope de-initialization function: L3GD20_DeInit()
    • -
    • Add gyroscope low power configuration function: L3GD20_LowPower()
    • -
  • -
-

NOTE This release must be used with BSP Common driver V4.0.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • 3gd20.h: change Ҡby “/†in the include path to fix compilation issue under Linux
  • -
  • Miscellaneous formatting and comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update to support new revision of L3GD20 component having new device ID 0xD5 (new define added: I_AM_L3GD20_TR)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of L3GD20 gyroscope
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/l3gd20/_htmresc/favicon.png b/Drivers/BSP/Components/l3gd20/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/l3gd20/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/l3gd20/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/l3gd20/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/l3gd20/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/l3gd20/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/l3gd20/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/l3gd20/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/l3gd20/l3gd20.c b/Drivers/BSP/Components/l3gd20/l3gd20.c deleted file mode 100644 index df738faec3..0000000000 --- a/Drivers/BSP/Components/l3gd20/l3gd20.c +++ /dev/null @@ -1,395 +0,0 @@ -/** - ****************************************************************************** - * @file l3gd20.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the L3GD20, - * ST MEMS motion sensor, 3-axis digital output gyroscope. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "l3gd20.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup L3GD20 - * @{ - */ - -/** @defgroup L3GD20_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup L3GD20_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup L3GD20_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup L3GD20_Private_Variables - * @{ - */ -GYRO_DrvTypeDef L3gd20Drv = -{ - L3GD20_Init, - L3GD20_DeInit, - L3GD20_ReadID, - L3GD20_RebootCmd, - L3GD20_LowPower, - L3GD20_INT1InterruptConfig, - L3GD20_EnableIT, - L3GD20_DisableIT, - 0, - 0, - L3GD20_FilterConfig, - L3GD20_FilterCmd, - L3GD20_ReadXYZAngRate -}; - -/** - * @} - */ - -/** @defgroup L3GD20_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup L3GD20_Private_Functions - * @{ - */ - -/** - * @brief Set L3GD20 Initialization. - * @param L3GD20_InitStruct: pointer to a L3GD20_InitTypeDef structure - * that contains the configuration setting for the L3GD20. - * @retval None - */ -void L3GD20_Init(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Configure the low level interface */ - GYRO_IO_Init(); - - /* Write value to MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG1_ADDR, 1); - - /* Write value to MEMS CTRL_REG4 register */ - ctrl = (uint8_t) (InitStruct >> 8); - GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG4_ADDR, 1); -} - - - -/** - * @brief L3GD20 De-initialization - * @param None - * @retval None - */ -void L3GD20_DeInit(void) -{ -} - -/** - * @brief Read ID address of L3GD20 - * @param None - * @retval ID name - */ -uint8_t L3GD20_ReadID(void) -{ - uint8_t tmp; - - /* Configure the low level interface */ - GYRO_IO_Init(); - - /* Read WHO I AM register */ - GYRO_IO_Read(&tmp, L3GD20_WHO_AM_I_ADDR, 1); - - /* Return the ID */ - return (uint8_t)tmp; -} - -/** - * @brief Reboot memory content of L3GD20 - * @param None - * @retval None - */ -void L3GD20_RebootCmd(void) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1); - - /* Enable or Disable the reboot memory */ - tmpreg |= L3GD20_BOOT_REBOOTMEMORY; - - /* Write value to MEMS CTRL_REG5 register */ - GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1); -} - -/** - * @brief Set L3GD20 in low-power mode - * @param - * @retval None - */ -void L3GD20_LowPower(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Write value to MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - GYRO_IO_Write(&ctrl, L3GD20_CTRL_REG1_ADDR, 1); -} - -/** - * @brief Set L3GD20 Interrupt INT1 configuration - * @param Int1Config: the configuration setting for the L3GD20 Interrupt. - * @retval None - */ -void L3GD20_INT1InterruptConfig(uint16_t Int1Config) -{ - uint8_t ctrl_cfr = 0x00, ctrl3 = 0x00; - - /* Read INT1_CFG register */ - GYRO_IO_Read(&ctrl_cfr, L3GD20_INT1_CFG_ADDR, 1); - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&ctrl3, L3GD20_CTRL_REG3_ADDR, 1); - - ctrl_cfr &= 0x80; - ctrl_cfr |= ((uint8_t) Int1Config >> 8); - - ctrl3 &= 0xDF; - ctrl3 |= ((uint8_t) Int1Config); - - /* Write value to MEMS INT1_CFG register */ - GYRO_IO_Write(&ctrl_cfr, L3GD20_INT1_CFG_ADDR, 1); - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&ctrl3, L3GD20_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Enable INT1 or INT2 interrupt - * @param IntSel: choice of INT1 or INT2 - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @retval None - */ -void L3GD20_EnableIT(uint8_t IntSel) -{ - uint8_t tmpreg; - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1); - - if(IntSel == L3GD20_INT1) - { - tmpreg &= 0x7F; - tmpreg |= L3GD20_INT1INTERRUPT_ENABLE; - } - else if(IntSel == L3GD20_INT2) - { - tmpreg &= 0xF7; - tmpreg |= L3GD20_INT2INTERRUPT_ENABLE; - } - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Disable INT1 or INT2 interrupt - * @param IntSel: choice of INT1 or INT2 - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @retval None - */ -void L3GD20_DisableIT(uint8_t IntSel) -{ - uint8_t tmpreg; - - /* Read CTRL_REG3 register */ - GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1); - - if(IntSel == L3GD20_INT1) - { - tmpreg &= 0x7F; - tmpreg |= L3GD20_INT1INTERRUPT_DISABLE; - } - else if(IntSel == L3GD20_INT2) - { - tmpreg &= 0xF7; - tmpreg |= L3GD20_INT2INTERRUPT_DISABLE; - } - - /* Write value to MEMS CTRL_REG3 register */ - GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG3_ADDR, 1); -} - -/** - * @brief Set High Pass Filter Modality - * @param FilterStruct: contains the configuration setting for the L3GD20. - * @retval None - */ -void L3GD20_FilterConfig(uint8_t FilterStruct) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1); - - tmpreg &= 0xC0; - - /* Configure MEMS: mode and cutoff frequency */ - tmpreg |= FilterStruct; - - /* Write value to MEMS CTRL_REG2 register */ - GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1); -} - -/** - * @brief Enable or Disable High Pass Filter - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: L3GD20_HIGHPASSFILTER_DISABLE - * @arg: L3GD20_HIGHPASSFILTER_ENABLE - * @retval None - */ -void L3GD20_FilterCmd(uint8_t HighPassFilterState) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - GYRO_IO_Read(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1); - - tmpreg &= 0xEF; - - tmpreg |= HighPassFilterState; - - /* Write value to MEMS CTRL_REG5 register */ - GYRO_IO_Write(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1); -} - -/** - * @brief Get status for L3GD20 data - * @param None - * @retval Data status in a L3GD20 Data - */ -uint8_t L3GD20_GetDataStatus(void) -{ - uint8_t tmpreg; - - /* Read STATUS_REG register */ - GYRO_IO_Read(&tmpreg, L3GD20_STATUS_REG_ADDR, 1); - - return tmpreg; -} - -/** -* @brief Calculate the L3GD20 angular data. -* @param pfData: Data out pointer -* @retval None -*/ -void L3GD20_ReadXYZAngRate(float *pfData) -{ - uint8_t tmpbuffer[6] ={0}; - int16_t RawData[3] = {0}; - uint8_t tmpreg = 0; - float sensitivity = 0; - int i =0; - - GYRO_IO_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1); - - GYRO_IO_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6); - - /* check in the control register 4 the data alignment (Big Endian or Little Endian)*/ - if(!(tmpreg & L3GD20_BLE_MSB)) - { - for(i=0; i<3; i++) - { - RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i+1] << 8) + tmpbuffer[2*i]); - } - } - else - { - for(i=0; i<3; i++) - { - RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i] << 8) + tmpbuffer[2*i+1]); - } - } - - /* Switch the sensitivity value set in the CRTL4 */ - switch(tmpreg & L3GD20_FULLSCALE_SELECTION) - { - case L3GD20_FULLSCALE_250: - sensitivity=L3GD20_SENSITIVITY_250DPS; - break; - - case L3GD20_FULLSCALE_500: - sensitivity=L3GD20_SENSITIVITY_500DPS; - break; - - case L3GD20_FULLSCALE_2000: - sensitivity=L3GD20_SENSITIVITY_2000DPS; - break; - } - /* Divide by sensitivity */ - for(i=0; i<3; i++) - { - pfData[i]=(float)(RawData[i] * sensitivity); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/l3gd20/l3gd20.h b/Drivers/BSP/Components/l3gd20/l3gd20.h deleted file mode 100644 index 7435948843..0000000000 --- a/Drivers/BSP/Components/l3gd20/l3gd20.h +++ /dev/null @@ -1,303 +0,0 @@ -/** - ****************************************************************************** - * @file l3gd20.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the l3gd20.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __L3GD20_H -#define __L3GD20_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/gyro.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup L3GD20 - * @{ - */ - -/** @defgroup L3GD20_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ -#define L3GD20_WHO_AM_I_ADDR 0x0F /* device identification register */ -#define L3GD20_CTRL_REG1_ADDR 0x20 /* Control register 1 */ -#define L3GD20_CTRL_REG2_ADDR 0x21 /* Control register 2 */ -#define L3GD20_CTRL_REG3_ADDR 0x22 /* Control register 3 */ -#define L3GD20_CTRL_REG4_ADDR 0x23 /* Control register 4 */ -#define L3GD20_CTRL_REG5_ADDR 0x24 /* Control register 5 */ -#define L3GD20_REFERENCE_REG_ADDR 0x25 /* Reference register */ -#define L3GD20_OUT_TEMP_ADDR 0x26 /* Out temp register */ -#define L3GD20_STATUS_REG_ADDR 0x27 /* Status register */ -#define L3GD20_OUT_X_L_ADDR 0x28 /* Output Register X */ -#define L3GD20_OUT_X_H_ADDR 0x29 /* Output Register X */ -#define L3GD20_OUT_Y_L_ADDR 0x2A /* Output Register Y */ -#define L3GD20_OUT_Y_H_ADDR 0x2B /* Output Register Y */ -#define L3GD20_OUT_Z_L_ADDR 0x2C /* Output Register Z */ -#define L3GD20_OUT_Z_H_ADDR 0x2D /* Output Register Z */ -#define L3GD20_FIFO_CTRL_REG_ADDR 0x2E /* Fifo control Register */ -#define L3GD20_FIFO_SRC_REG_ADDR 0x2F /* Fifo src Register */ - -#define L3GD20_INT1_CFG_ADDR 0x30 /* Interrupt 1 configuration Register */ -#define L3GD20_INT1_SRC_ADDR 0x31 /* Interrupt 1 source Register */ -#define L3GD20_INT1_TSH_XH_ADDR 0x32 /* Interrupt 1 Threshold X register */ -#define L3GD20_INT1_TSH_XL_ADDR 0x33 /* Interrupt 1 Threshold X register */ -#define L3GD20_INT1_TSH_YH_ADDR 0x34 /* Interrupt 1 Threshold Y register */ -#define L3GD20_INT1_TSH_YL_ADDR 0x35 /* Interrupt 1 Threshold Y register */ -#define L3GD20_INT1_TSH_ZH_ADDR 0x36 /* Interrupt 1 Threshold Z register */ -#define L3GD20_INT1_TSH_ZL_ADDR 0x37 /* Interrupt 1 Threshold Z register */ -#define L3GD20_INT1_DURATION_ADDR 0x38 /* Interrupt 1 DURATION register */ - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ - -#define I_AM_L3GD20 ((uint8_t)0xD4) -#define I_AM_L3GD20_TR ((uint8_t)0xD5) - -/** @defgroup Power_Mode_selection - * @{ - */ -#define L3GD20_MODE_POWERDOWN ((uint8_t)0x00) -#define L3GD20_MODE_ACTIVE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup OutPut_DataRate_Selection - * @{ - */ -#define L3GD20_OUTPUT_DATARATE_1 ((uint8_t)0x00) -#define L3GD20_OUTPUT_DATARATE_2 ((uint8_t)0x40) -#define L3GD20_OUTPUT_DATARATE_3 ((uint8_t)0x80) -#define L3GD20_OUTPUT_DATARATE_4 ((uint8_t)0xC0) -/** - * @} - */ - -/** @defgroup Axes_Selection - * @{ - */ -#define L3GD20_X_ENABLE ((uint8_t)0x02) -#define L3GD20_Y_ENABLE ((uint8_t)0x01) -#define L3GD20_Z_ENABLE ((uint8_t)0x04) -#define L3GD20_AXES_ENABLE ((uint8_t)0x07) -#define L3GD20_AXES_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Bandwidth_Selection - * @{ - */ -#define L3GD20_BANDWIDTH_1 ((uint8_t)0x00) -#define L3GD20_BANDWIDTH_2 ((uint8_t)0x10) -#define L3GD20_BANDWIDTH_3 ((uint8_t)0x20) -#define L3GD20_BANDWIDTH_4 ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Full_Scale_Selection - * @{ - */ -#define L3GD20_FULLSCALE_250 ((uint8_t)0x00) -#define L3GD20_FULLSCALE_500 ((uint8_t)0x10) -#define L3GD20_FULLSCALE_2000 ((uint8_t)0x20) -#define L3GD20_FULLSCALE_SELECTION ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Full_Scale_Sensitivity - * @{ - */ -#define L3GD20_SENSITIVITY_250DPS ((float)8.75f) /*!< gyroscope sensitivity with 250 dps full scale [DPS/LSB] */ -#define L3GD20_SENSITIVITY_500DPS ((float)17.50f) /*!< gyroscope sensitivity with 500 dps full scale [DPS/LSB] */ -#define L3GD20_SENSITIVITY_2000DPS ((float)70.00f) /*!< gyroscope sensitivity with 2000 dps full scale [DPS/LSB] */ -/** - * @} - */ - - -/** @defgroup Block_Data_Update - * @{ - */ -#define L3GD20_BlockDataUpdate_Continous ((uint8_t)0x00) -#define L3GD20_BlockDataUpdate_Single ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Endian_Data_selection - * @{ - */ -#define L3GD20_BLE_LSB ((uint8_t)0x00) -#define L3GD20_BLE_MSB ((uint8_t)0x40) -/** - * @} - */ - -/** @defgroup High_Pass_Filter_status - * @{ - */ -#define L3GD20_HIGHPASSFILTER_DISABLE ((uint8_t)0x00) -#define L3GD20_HIGHPASSFILTER_ENABLE ((uint8_t)0x10) -/** - * @} - */ - -/** @defgroup INT1_INT2_selection - * @{ - */ -#define L3GD20_INT1 ((uint8_t)0x00) -#define L3GD20_INT2 ((uint8_t)0x01) -/** - * @} - */ - -/** @defgroup INT1_Interrupt_status - * @{ - */ -#define L3GD20_INT1INTERRUPT_DISABLE ((uint8_t)0x00) -#define L3GD20_INT1INTERRUPT_ENABLE ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup INT2_Interrupt_status - * @{ - */ -#define L3GD20_INT2INTERRUPT_DISABLE ((uint8_t)0x00) -#define L3GD20_INT2INTERRUPT_ENABLE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup INT1_Interrupt_ActiveEdge - * @{ - */ -#define L3GD20_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20) -#define L3GD20_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Boot_Mode_selection - * @{ - */ -#define L3GD20_BOOT_NORMALMODE ((uint8_t)0x00) -#define L3GD20_BOOT_REBOOTMEMORY ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup High_Pass_Filter_Mode - * @{ - */ -#define L3GD20_HPM_NORMAL_MODE_RES ((uint8_t)0x00) -#define L3GD20_HPM_REF_SIGNAL ((uint8_t)0x10) -#define L3GD20_HPM_NORMAL_MODE ((uint8_t)0x20) -#define L3GD20_HPM_AUTORESET_INT ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup High_Pass_CUT OFF_Frequency - * @{ - */ -#define L3GD20_HPFCF_0 0x00 -#define L3GD20_HPFCF_1 0x01 -#define L3GD20_HPFCF_2 0x02 -#define L3GD20_HPFCF_3 0x03 -#define L3GD20_HPFCF_4 0x04 -#define L3GD20_HPFCF_5 0x05 -#define L3GD20_HPFCF_6 0x06 -#define L3GD20_HPFCF_7 0x07 -#define L3GD20_HPFCF_8 0x08 -#define L3GD20_HPFCF_9 0x09 -/** - * @} - */ - -/** - * @} - */ -/** @defgroup L3GD20_Exported_Functions - * @{ - */ -/* Sensor Configuration Functions */ -void L3GD20_Init(uint16_t InitStruct); -void L3GD20_DeInit(void); -void L3GD20_LowPower(uint16_t InitStruct); -uint8_t L3GD20_ReadID(void); -void L3GD20_RebootCmd(void); - -/* Interrupt Configuration Functions */ -void L3GD20_INT1InterruptConfig(uint16_t Int1Config); -void L3GD20_EnableIT(uint8_t IntSel); -void L3GD20_DisableIT(uint8_t IntSel); - -/* High Pass Filter Configuration Functions */ -void L3GD20_FilterConfig(uint8_t FilterStruct); -void L3GD20_FilterCmd(uint8_t HighPassFilterState); -void L3GD20_ReadXYZAngRate(float *pfData); -uint8_t L3GD20_GetDataStatus(void); - -/* Gyroscope IO functions */ -void GYRO_IO_Init(void); -void GYRO_IO_DeInit(void); -void GYRO_IO_Write(uint8_t *pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite); -void GYRO_IO_Read(uint8_t *pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead); - -/* Gyroscope driver structure */ -extern GYRO_DrvTypeDef L3gd20Drv; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus - } -#endif - -#endif /* __L3GD20_H */ diff --git a/Drivers/BSP/Components/lan8742 b/Drivers/BSP/Components/lan8742 new file mode 160000 index 0000000000..9f365d062b --- /dev/null +++ b/Drivers/BSP/Components/lan8742 @@ -0,0 +1 @@ +Subproject commit 9f365d062b3cfae33859acd50e5df932e815b76a diff --git a/Drivers/BSP/Components/lan8742/LICENSE.md b/Drivers/BSP/Components/lan8742/LICENSE.md deleted file mode 100644 index 95e897d22f..0000000000 --- a/Drivers/BSP/Components/lan8742/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017(-2019) STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/Components/lan8742/Release_Notes.html b/Drivers/BSP/Components/lan8742/Release_Notes.html deleted file mode 100644 index 7202045992..0000000000 --- a/Drivers/BSP/Components/lan8742/Release_Notes.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - Release Notes for LAN8742 Component Driver - - - - - - -
-
-
-

Release Notes for

-

LAN8742 PHY Component Driver

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This driver provides a set of Ethernet PHY functions offered by LAN8742 component

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update license
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update license notice
  • -
  • Fix Spelling issues
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update st_logo.png inclusion path in Release notes
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of LAN8742 PHY driver
  • -
-
-
-
-
-
-For complete documentation on STM32 Microcontrollers , visit: www.st.com -
- - diff --git a/Drivers/BSP/Components/lan8742/_htmresc/Add button.svg b/Drivers/BSP/Components/lan8742/_htmresc/Add button.svg deleted file mode 100644 index c211545dad..0000000000 --- a/Drivers/BSP/Components/lan8742/_htmresc/Add button.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Drivers/BSP/Components/lan8742/_htmresc/Update.svg b/Drivers/BSP/Components/lan8742/_htmresc/Update.svg deleted file mode 100644 index f88381f1e6..0000000000 --- a/Drivers/BSP/Components/lan8742/_htmresc/Update.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Drivers/BSP/Components/lan8742/_htmresc/favicon.png b/Drivers/BSP/Components/lan8742/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/lan8742/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/lan8742/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/lan8742/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/lan8742/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/lan8742/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/lan8742/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/lan8742/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/lan8742/lan8742.c b/Drivers/BSP/Components/lan8742/lan8742.c deleted file mode 100644 index 7259b17563..0000000000 --- a/Drivers/BSP/Components/lan8742/lan8742.c +++ /dev/null @@ -1,662 +0,0 @@ -/** - ****************************************************************************** - * @file lan8742.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the LAN742 - * PHY devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "lan8742.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup LAN8742 LAN8742 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/** @defgroup LAN8742_Private_Defines LAN8742 Private Defines - * @{ - */ -#define LAN8742_SW_RESET_TO ((uint32_t)500U) -#define LAN8742_INIT_TO ((uint32_t)2000U) -#define LAN8742_MAX_DEV_ADDR ((uint32_t)31U) -/** - * @} - */ - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -/** @defgroup LAN8742_Private_Functions LAN8742 Private Functions - * @{ - */ - -/** - * @brief Register IO functions to component object - * @param pObj: device object of LAN8742_Object_t. - * @param ioctx: holds device IO functions. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_ERROR if missing mandatory function - */ -int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx) -{ - if(!pObj || !ioctx->ReadReg || !ioctx->WriteReg || !ioctx->GetTick) - { - return LAN8742_STATUS_ERROR; - } - - pObj->IO.Init = ioctx->Init; - pObj->IO.DeInit = ioctx->DeInit; - pObj->IO.ReadReg = ioctx->ReadReg; - pObj->IO.WriteReg = ioctx->WriteReg; - pObj->IO.GetTick = ioctx->GetTick; - - return LAN8742_STATUS_OK; -} - -/** - * @brief Initialize the lan8742 and configure the needed hardware resources - * @param pObj: device object LAN8742_Object_t. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_ADDRESS_ERROR if cannot find device address - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - * LAN8742_STATUS_RESET_TIMEOUT if cannot perform a software reset - */ - int32_t LAN8742_Init(lan8742_Object_t *pObj) - { - uint32_t tickstart = 0, regvalue = 0, addr = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->Is_Initialized == 0) - { - if(pObj->IO.Init != 0) - { - /* GPIO and Clocks initialization */ - pObj->IO.Init(); - } - - /* for later check */ - pObj->DevAddr = LAN8742_MAX_DEV_ADDR + 1; - - /* Get the device address from special mode register */ - for(addr = 0; addr <= LAN8742_MAX_DEV_ADDR; addr ++) - { - if(pObj->IO.ReadReg(addr, LAN8742_SMR, ®value) < 0) - { - status = LAN8742_STATUS_READ_ERROR; - /* Can't read from this device address - continue with next address */ - continue; - } - - if((regvalue & LAN8742_SMR_PHY_ADDR) == addr) - { - pObj->DevAddr = addr; - status = LAN8742_STATUS_OK; - break; - } - } - - if(pObj->DevAddr > LAN8742_MAX_DEV_ADDR) - { - status = LAN8742_STATUS_ADDRESS_ERROR; - } - - /* if device address is matched */ - if(status == LAN8742_STATUS_OK) - { - /* set a software reset */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_SOFT_RESET) >= 0) - { - /* get software reset status */ - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) >= 0) - { - tickstart = pObj->IO.GetTick(); - - /* wait until software reset is done or timeout occurred */ - while(regvalue & LAN8742_BCR_SOFT_RESET) - { - if((pObj->IO.GetTick() - tickstart) <= LAN8742_SW_RESET_TO) - { - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, ®value) < 0) - { - status = LAN8742_STATUS_READ_ERROR; - break; - } - } - else - { - status = LAN8742_STATUS_RESET_TIMEOUT; - break; - } - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - } - else - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - } - - if(status == LAN8742_STATUS_OK) - { - tickstart = pObj->IO.GetTick(); - - /* Wait for 2s to perform initialization */ - while((pObj->IO.GetTick() - tickstart) <= LAN8742_INIT_TO) - { - } - pObj->Is_Initialized = 1; - } - - return status; - } - -/** - * @brief De-Initialize the lan8742 and it's hardware resources - * @param pObj: device object LAN8742_Object_t. - * @retval None - */ -int32_t LAN8742_DeInit(lan8742_Object_t *pObj) -{ - if(pObj->Is_Initialized) - { - if(pObj->IO.DeInit != 0) - { - if(pObj->IO.DeInit() < 0) - { - return LAN8742_STATUS_ERROR; - } - } - - pObj->Is_Initialized = 0; - } - - return LAN8742_STATUS_OK; -} - -/** - * @brief Disable the LAN8742 power down mode. - * @param pObj: device object LAN8742_Object_t. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) - { - readval &= ~LAN8742_BCR_POWER_DOWN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Enable the LAN8742 power down mode. - * @param pObj: device object LAN8742_Object_t. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) - { - readval |= LAN8742_BCR_POWER_DOWN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Start the auto negotiation process. - * @param pObj: device object LAN8742_Object_t. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) - { - readval |= LAN8742_BCR_AUTONEGO_EN; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Get the link state of LAN8742 device. - * @param pObj: Pointer to device object. - * @param pLinkState: Pointer to link state - * @retval LAN8742_STATUS_LINK_DOWN if link is down - * LAN8742_STATUS_AUTONEGO_NOTDONE if Auto nego not completed - * LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD - * LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD - * LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD - * LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - - /* Read Status register */ - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) - { - return LAN8742_STATUS_READ_ERROR; - } - - /* Read Status register again */ - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BSR, &readval) < 0) - { - return LAN8742_STATUS_READ_ERROR; - } - - if((readval & LAN8742_BSR_LINK_STATUS) == 0) - { - /* Return Link Down status */ - return LAN8742_STATUS_LINK_DOWN; - } - - /* Check Auto negotiation */ - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) < 0) - { - return LAN8742_STATUS_READ_ERROR; - } - - if((readval & LAN8742_BCR_AUTONEGO_EN) != LAN8742_BCR_AUTONEGO_EN) - { - if(((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) && ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE)) - { - return LAN8742_STATUS_100MBITS_FULLDUPLEX; - } - else if ((readval & LAN8742_BCR_SPEED_SELECT) == LAN8742_BCR_SPEED_SELECT) - { - return LAN8742_STATUS_100MBITS_HALFDUPLEX; - } - else if ((readval & LAN8742_BCR_DUPLEX_MODE) == LAN8742_BCR_DUPLEX_MODE) - { - return LAN8742_STATUS_10MBITS_FULLDUPLEX; - } - else - { - return LAN8742_STATUS_10MBITS_HALFDUPLEX; - } - } - else /* Auto Nego enabled */ - { - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_PHYSCSR, &readval) < 0) - { - return LAN8742_STATUS_READ_ERROR; - } - - /* Check if auto nego not done */ - if((readval & LAN8742_PHYSCSR_AUTONEGO_DONE) == 0) - { - return LAN8742_STATUS_AUTONEGO_NOTDONE; - } - - if((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_FD) - { - return LAN8742_STATUS_100MBITS_FULLDUPLEX; - } - else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_100BTX_HD) - { - return LAN8742_STATUS_100MBITS_HALFDUPLEX; - } - else if ((readval & LAN8742_PHYSCSR_HCDSPEEDMASK) == LAN8742_PHYSCSR_10BT_FD) - { - return LAN8742_STATUS_10MBITS_FULLDUPLEX; - } - else - { - return LAN8742_STATUS_10MBITS_HALFDUPLEX; - } - } -} - -/** - * @brief Set the link state of LAN8742 device. - * @param pObj: Pointer to device object. - * @param pLinkState: link state can be one of the following - * LAN8742_STATUS_100MBITS_FULLDUPLEX if 100Mb/s FD - * LAN8742_STATUS_100MBITS_HALFDUPLEX if 100Mb/s HD - * LAN8742_STATUS_10MBITS_FULLDUPLEX if 10Mb/s FD - * LAN8742_STATUS_10MBITS_HALFDUPLEX if 10Mb/s HD - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_ERROR if parameter error - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState) -{ - uint32_t bcrvalue = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &bcrvalue) >= 0) - { - /* Disable link config (Auto nego, speed and duplex) */ - bcrvalue &= ~(LAN8742_BCR_AUTONEGO_EN | LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE); - - if(LinkState == LAN8742_STATUS_100MBITS_FULLDUPLEX) - { - bcrvalue |= (LAN8742_BCR_SPEED_SELECT | LAN8742_BCR_DUPLEX_MODE); - } - else if (LinkState == LAN8742_STATUS_100MBITS_HALFDUPLEX) - { - bcrvalue |= LAN8742_BCR_SPEED_SELECT; - } - else if (LinkState == LAN8742_STATUS_10MBITS_FULLDUPLEX) - { - bcrvalue |= LAN8742_BCR_DUPLEX_MODE; - } - else - { - /* Wrong link status parameter */ - status = LAN8742_STATUS_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - if(status == LAN8742_STATUS_OK) - { - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, bcrvalue) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - - return status; -} - -/** - * @brief Enable loopback mode. - * @param pObj: Pointer to device object. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) - { - readval |= LAN8742_BCR_LOOPBACK; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Disable loopback mode. - * @param pObj: Pointer to device object. - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_BCR, &readval) >= 0) - { - readval &= ~LAN8742_BCR_LOOPBACK; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Enable IT source. - * @param pObj: Pointer to device object. - * @param Interrupt: IT source to be enabled - * should be a value or a combination of the following: - * LAN8742_WOL_IT - * LAN8742_ENERGYON_IT - * LAN8742_AUTONEGO_COMPLETE_IT - * LAN8742_REMOTE_FAULT_IT - * LAN8742_LINK_DOWN_IT - * LAN8742_AUTONEGO_LP_ACK_IT - * LAN8742_PARALLEL_DETECTION_FAULT_IT - * LAN8742_AUTONEGO_PAGE_RECEIVED_IT - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) - { - readval |= Interrupt; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Disable IT source. - * @param pObj: Pointer to device object. - * @param Interrupt: IT source to be disabled - * should be a value or a combination of the following: - * LAN8742_WOL_IT - * LAN8742_ENERGYON_IT - * LAN8742_AUTONEGO_COMPLETE_IT - * LAN8742_REMOTE_FAULT_IT - * LAN8742_LINK_DOWN_IT - * LAN8742_AUTONEGO_LP_ACK_IT - * LAN8742_PARALLEL_DETECTION_FAULT_IT - * LAN8742_AUTONEGO_PAGE_RECEIVED_IT - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - * LAN8742_STATUS_WRITE_ERROR if cannot write to register - */ -int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_IMR, &readval) >= 0) - { - readval &= ~Interrupt; - - /* Apply configuration */ - if(pObj->IO.WriteReg(pObj->DevAddr, LAN8742_IMR, readval) < 0) - { - status = LAN8742_STATUS_WRITE_ERROR; - } - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Clear IT flag. - * @param pObj: Pointer to device object. - * @param Interrupt: IT flag to be cleared - * should be a value or a combination of the following: - * LAN8742_WOL_IT - * LAN8742_ENERGYON_IT - * LAN8742_AUTONEGO_COMPLETE_IT - * LAN8742_REMOTE_FAULT_IT - * LAN8742_LINK_DOWN_IT - * LAN8742_AUTONEGO_LP_ACK_IT - * LAN8742_PARALLEL_DETECTION_FAULT_IT - * LAN8742_AUTONEGO_PAGE_RECEIVED_IT - * @retval LAN8742_STATUS_OK if OK - * LAN8742_STATUS_READ_ERROR if cannot read register - */ -int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = LAN8742_STATUS_OK; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) < 0) - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @brief Get IT Flag status. - * @param pObj: Pointer to device object. - * @param Interrupt: IT Flag to be checked, - * should be a value or a combination of the following: - * LAN8742_WOL_IT - * LAN8742_ENERGYON_IT - * LAN8742_AUTONEGO_COMPLETE_IT - * LAN8742_REMOTE_FAULT_IT - * LAN8742_LINK_DOWN_IT - * LAN8742_AUTONEGO_LP_ACK_IT - * LAN8742_PARALLEL_DETECTION_FAULT_IT - * LAN8742_AUTONEGO_PAGE_RECEIVED_IT - * @retval 1 IT flag is SET - * 0 IT flag is RESET - * LAN8742_STATUS_READ_ERROR if cannot read register - */ -int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt) -{ - uint32_t readval = 0; - int32_t status = 0; - - if(pObj->IO.ReadReg(pObj->DevAddr, LAN8742_ISFR, &readval) >= 0) - { - status = ((readval & Interrupt) == Interrupt); - } - else - { - status = LAN8742_STATUS_READ_ERROR; - } - - return status; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lan8742/lan8742.h b/Drivers/BSP/Components/lan8742/lan8742.h deleted file mode 100644 index dc3da16d1f..0000000000 --- a/Drivers/BSP/Components/lan8742/lan8742.h +++ /dev/null @@ -1,446 +0,0 @@ -/** - ****************************************************************************** - * @file lan8742.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * lan8742.c PHY driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef LAN8742_H -#define LAN8742_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup LAN8742 - * @{ - */ -/* Exported constants --------------------------------------------------------*/ -/** @defgroup LAN8742_Exported_Constants LAN8742 Exported Constants - * @{ - */ - -/** @defgroup LAN8742_Registers_Mapping LAN8742 Registers Mapping - * @{ - */ -#define LAN8742_BCR ((uint16_t)0x0000U) -#define LAN8742_BSR ((uint16_t)0x0001U) -#define LAN8742_PHYI1R ((uint16_t)0x0002U) -#define LAN8742_PHYI2R ((uint16_t)0x0003U) -#define LAN8742_ANAR ((uint16_t)0x0004U) -#define LAN8742_ANLPAR ((uint16_t)0x0005U) -#define LAN8742_ANER ((uint16_t)0x0006U) -#define LAN8742_ANNPTR ((uint16_t)0x0007U) -#define LAN8742_ANNPRR ((uint16_t)0x0008U) -#define LAN8742_MMDACR ((uint16_t)0x000DU) -#define LAN8742_MMDAADR ((uint16_t)0x000EU) -#define LAN8742_ENCTR ((uint16_t)0x0010U) -#define LAN8742_MCSR ((uint16_t)0x0011U) -#define LAN8742_SMR ((uint16_t)0x0012U) -#define LAN8742_TPDCR ((uint16_t)0x0018U) -#define LAN8742_TCSR ((uint16_t)0x0019U) -#define LAN8742_SECR ((uint16_t)0x001AU) -#define LAN8742_SCSIR ((uint16_t)0x001BU) -#define LAN8742_CLR ((uint16_t)0x001CU) -#define LAN8742_ISFR ((uint16_t)0x001DU) -#define LAN8742_IMR ((uint16_t)0x001EU) -#define LAN8742_PHYSCSR ((uint16_t)0x001FU) -/** - * @} - */ - -/** @defgroup LAN8742_BCR_Bit_Definition LAN8742 BCR Bit Definition - * @{ - */ -#define LAN8742_BCR_SOFT_RESET ((uint16_t)0x8000U) -#define LAN8742_BCR_LOOPBACK ((uint16_t)0x4000U) -#define LAN8742_BCR_SPEED_SELECT ((uint16_t)0x2000U) -#define LAN8742_BCR_AUTONEGO_EN ((uint16_t)0x1000U) -#define LAN8742_BCR_POWER_DOWN ((uint16_t)0x0800U) -#define LAN8742_BCR_ISOLATE ((uint16_t)0x0400U) -#define LAN8742_BCR_RESTART_AUTONEGO ((uint16_t)0x0200U) -#define LAN8742_BCR_DUPLEX_MODE ((uint16_t)0x0100U) -/** - * @} - */ - -/** @defgroup LAN8742_BSR_Bit_Definition LAN8742 BSR Bit Definition - * @{ - */ -#define LAN8742_BSR_100BASE_T4 ((uint16_t)0x8000U) -#define LAN8742_BSR_100BASE_TX_FD ((uint16_t)0x4000U) -#define LAN8742_BSR_100BASE_TX_HD ((uint16_t)0x2000U) -#define LAN8742_BSR_10BASE_T_FD ((uint16_t)0x1000U) -#define LAN8742_BSR_10BASE_T_HD ((uint16_t)0x0800U) -#define LAN8742_BSR_100BASE_T2_FD ((uint16_t)0x0400U) -#define LAN8742_BSR_100BASE_T2_HD ((uint16_t)0x0200U) -#define LAN8742_BSR_EXTENDED_STATUS ((uint16_t)0x0100U) -#define LAN8742_BSR_AUTONEGO_CPLT ((uint16_t)0x0020U) -#define LAN8742_BSR_REMOTE_FAULT ((uint16_t)0x0010U) -#define LAN8742_BSR_AUTONEGO_ABILITY ((uint16_t)0x0008U) -#define LAN8742_BSR_LINK_STATUS ((uint16_t)0x0004U) -#define LAN8742_BSR_JABBER_DETECT ((uint16_t)0x0002U) -#define LAN8742_BSR_EXTENDED_CAP ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup LAN8742_PHYI1R_Bit_Definition LAN8742 PHYI1R Bit Definition - * @{ - */ -#define LAN8742_PHYI1R_OUI_3_18 ((uint16_t)0xFFFFU) -/** - * @} - */ - -/** @defgroup LAN8742_PHYI2R_Bit_Definition LAN8742 PHYI2R Bit Definition - * @{ - */ -#define LAN8742_PHYI2R_OUI_19_24 ((uint16_t)0xFC00U) -#define LAN8742_PHYI2R_MODEL_NBR ((uint16_t)0x03F0U) -#define LAN8742_PHYI2R_REVISION_NBR ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup LAN8742_ANAR_Bit_Definition LAN8742 ANAR Bit Definition - * @{ - */ -#define LAN8742_ANAR_NEXT_PAGE ((uint16_t)0x8000U) -#define LAN8742_ANAR_REMOTE_FAULT ((uint16_t)0x2000U) -#define LAN8742_ANAR_PAUSE_OPERATION ((uint16_t)0x0C00U) -#define LAN8742_ANAR_PO_NOPAUSE ((uint16_t)0x0000U) -#define LAN8742_ANAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) -#define LAN8742_ANAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) -#define LAN8742_ANAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) -#define LAN8742_ANAR_100BASE_TX_FD ((uint16_t)0x0100U) -#define LAN8742_ANAR_100BASE_TX ((uint16_t)0x0080U) -#define LAN8742_ANAR_10BASE_T_FD ((uint16_t)0x0040U) -#define LAN8742_ANAR_10BASE_T ((uint16_t)0x0020U) -#define LAN8742_ANAR_SELECTOR_FIELD ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup LAN8742_ANLPAR_Bit_Definition LAN8742 ANLPAR Bit Definition - * @{ - */ -#define LAN8742_ANLPAR_NEXT_PAGE ((uint16_t)0x8000U) -#define LAN8742_ANLPAR_REMOTE_FAULT ((uint16_t)0x2000U) -#define LAN8742_ANLPAR_PAUSE_OPERATION ((uint16_t)0x0C00U) -#define LAN8742_ANLPAR_PO_NOPAUSE ((uint16_t)0x0000U) -#define LAN8742_ANLPAR_PO_SYMMETRIC_PAUSE ((uint16_t)0x0400U) -#define LAN8742_ANLPAR_PO_ASYMMETRIC_PAUSE ((uint16_t)0x0800U) -#define LAN8742_ANLPAR_PO_ADVERTISE_SUPPORT ((uint16_t)0x0C00U) -#define LAN8742_ANLPAR_100BASE_TX_FD ((uint16_t)0x0100U) -#define LAN8742_ANLPAR_100BASE_TX ((uint16_t)0x0080U) -#define LAN8742_ANLPAR_10BASE_T_FD ((uint16_t)0x0040U) -#define LAN8742_ANLPAR_10BASE_T ((uint16_t)0x0020U) -#define LAN8742_ANLPAR_SELECTOR_FIELD ((uint16_t)0x000FU) -/** - * @} - */ - -/** @defgroup LAN8742_ANER_Bit_Definition LAN8742 ANER Bit Definition - * @{ - */ -#define LAN8742_ANER_RX_NP_LOCATION_ABLE ((uint16_t)0x0040U) -#define LAN8742_ANER_RX_NP_STORAGE_LOCATION ((uint16_t)0x0020U) -#define LAN8742_ANER_PARALLEL_DETECT_FAULT ((uint16_t)0x0010U) -#define LAN8742_ANER_LP_NP_ABLE ((uint16_t)0x0008U) -#define LAN8742_ANER_NP_ABLE ((uint16_t)0x0004U) -#define LAN8742_ANER_PAGE_RECEIVED ((uint16_t)0x0002U) -#define LAN8742_ANER_LP_AUTONEG_ABLE ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup LAN8742_ANNPTR_Bit_Definition LAN8742 ANNPTR Bit Definition - * @{ - */ -#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U) -#define LAN8742_ANNPTR_MESSAGE_PAGE ((uint16_t)0x2000U) -#define LAN8742_ANNPTR_ACK2 ((uint16_t)0x1000U) -#define LAN8742_ANNPTR_TOGGLE ((uint16_t)0x0800U) -#define LAN8742_ANNPTR_MESSAGGE_CODE ((uint16_t)0x07FFU) -/** - * @} - */ - -/** @defgroup LAN8742_ANNPRR_Bit_Definition LAN8742 ANNPRR Bit Definition - * @{ - */ -#define LAN8742_ANNPTR_NEXT_PAGE ((uint16_t)0x8000U) -#define LAN8742_ANNPRR_ACK ((uint16_t)0x4000U) -#define LAN8742_ANNPRR_MESSAGE_PAGE ((uint16_t)0x2000U) -#define LAN8742_ANNPRR_ACK2 ((uint16_t)0x1000U) -#define LAN8742_ANNPRR_TOGGLE ((uint16_t)0x0800U) -#define LAN8742_ANNPRR_MESSAGGE_CODE ((uint16_t)0x07FFU) -/** - * @} - */ - -/** @defgroup LAN8742_MMDACR_Bit_Definition LAN8742 MMDACR Bit Definition - * @{ - */ -#define LAN8742_MMDACR_MMD_FUNCTION ((uint16_t)0xC000U) -#define LAN8742_MMDACR_MMD_FUNCTION_ADDR ((uint16_t)0x0000U) -#define LAN8742_MMDACR_MMD_FUNCTION_DATA ((uint16_t)0x4000U) -#define LAN8742_MMDACR_MMD_DEV_ADDR ((uint16_t)0x001FU) -/** - * @} - */ - -/** @defgroup LAN8742_ENCTR_Bit_Definition LAN8742 ENCTR Bit Definition - * @{ - */ -#define LAN8742_ENCTR_TX_ENABLE ((uint16_t)0x8000U) -#define LAN8742_ENCTR_TX_TIMER ((uint16_t)0x6000U) -#define LAN8742_ENCTR_TX_TIMER_1S ((uint16_t)0x0000U) -#define LAN8742_ENCTR_TX_TIMER_768MS ((uint16_t)0x2000U) -#define LAN8742_ENCTR_TX_TIMER_512MS ((uint16_t)0x4000U) -#define LAN8742_ENCTR_TX_TIMER_265MS ((uint16_t)0x6000U) -#define LAN8742_ENCTR_RX_ENABLE ((uint16_t)0x1000U) -#define LAN8742_ENCTR_RX_MAX_INTERVAL ((uint16_t)0x0C00U) -#define LAN8742_ENCTR_RX_MAX_INTERVAL_64MS ((uint16_t)0x0000U) -#define LAN8742_ENCTR_RX_MAX_INTERVAL_256MS ((uint16_t)0x0400U) -#define LAN8742_ENCTR_RX_MAX_INTERVAL_512MS ((uint16_t)0x0800U) -#define LAN8742_ENCTR_RX_MAX_INTERVAL_1S ((uint16_t)0x0C00U) -#define LAN8742_ENCTR_EX_CROSS_OVER ((uint16_t)0x0002U) -#define LAN8742_ENCTR_EX_MANUAL_CROSS_OVER ((uint16_t)0x0001U) -/** - * @} - */ - -/** @defgroup LAN8742_MCSR_Bit_Definition LAN8742 MCSR Bit Definition - * @{ - */ -#define LAN8742_MCSR_EDPWRDOWN ((uint16_t)0x2000U) -#define LAN8742_MCSR_FARLOOPBACK ((uint16_t)0x0200U) -#define LAN8742_MCSR_ALTINT ((uint16_t)0x0040U) -#define LAN8742_MCSR_ENERGYON ((uint16_t)0x0002U) -/** - * @} - */ - -/** @defgroup LAN8742_SMR_Bit_Definition LAN8742 SMR Bit Definition - * @{ - */ -#define LAN8742_SMR_MODE ((uint16_t)0x00E0U) -#define LAN8742_SMR_PHY_ADDR ((uint16_t)0x001FU) -/** - * @} - */ - -/** @defgroup LAN8742_TPDCR_Bit_Definition LAN8742 TPDCR Bit Definition - * @{ - */ -#define LAN8742_TPDCR_DELAY_IN ((uint16_t)0x8000U) -#define LAN8742_TPDCR_LINE_BREAK_COUNTER ((uint16_t)0x7000U) -#define LAN8742_TPDCR_PATTERN_HIGH ((uint16_t)0x0FC0U) -#define LAN8742_TPDCR_PATTERN_LOW ((uint16_t)0x003FU) -/** - * @} - */ - -/** @defgroup LAN8742_TCSR_Bit_Definition LAN8742 TCSR Bit Definition - * @{ - */ -#define LAN8742_TCSR_TDR_ENABLE ((uint16_t)0x8000U) -#define LAN8742_TCSR_TDR_AD_FILTER_ENABLE ((uint16_t)0x4000U) -#define LAN8742_TCSR_TDR_CH_CABLE_TYPE ((uint16_t)0x0600U) -#define LAN8742_TCSR_TDR_CH_CABLE_DEFAULT ((uint16_t)0x0000U) -#define LAN8742_TCSR_TDR_CH_CABLE_SHORTED ((uint16_t)0x0200U) -#define LAN8742_TCSR_TDR_CH_CABLE_OPEN ((uint16_t)0x0400U) -#define LAN8742_TCSR_TDR_CH_CABLE_MATCH ((uint16_t)0x0600U) -#define LAN8742_TCSR_TDR_CH_STATUS ((uint16_t)0x0100U) -#define LAN8742_TCSR_TDR_CH_LENGTH ((uint16_t)0x00FFU) -/** - * @} - */ - -/** @defgroup LAN8742_SCSIR_Bit_Definition LAN8742 SCSIR Bit Definition - * @{ - */ -#define LAN8742_SCSIR_AUTO_MDIX_ENABLE ((uint16_t)0x8000U) -#define LAN8742_SCSIR_CHANNEL_SELECT ((uint16_t)0x2000U) -#define LAN8742_SCSIR_SQE_DISABLE ((uint16_t)0x0800U) -#define LAN8742_SCSIR_XPOLALITY ((uint16_t)0x0010U) -/** - * @} - */ - -/** @defgroup LAN8742_CLR_Bit_Definition LAN8742 CLR Bit Definition - * @{ - */ -#define LAN8742_CLR_CABLE_LENGTH ((uint16_t)0xF000U) -/** - * @} - */ - -/** @defgroup LAN8742_IMR_ISFR_Bit_Definition LAN8742 IMR ISFR Bit Definition - * @{ - */ -#define LAN8742_INT_8 ((uint16_t)0x0100U) -#define LAN8742_INT_7 ((uint16_t)0x0080U) -#define LAN8742_INT_6 ((uint16_t)0x0040U) -#define LAN8742_INT_5 ((uint16_t)0x0020U) -#define LAN8742_INT_4 ((uint16_t)0x0010U) -#define LAN8742_INT_3 ((uint16_t)0x0008U) -#define LAN8742_INT_2 ((uint16_t)0x0004U) -#define LAN8742_INT_1 ((uint16_t)0x0002U) -/** - * @} - */ - -/** @defgroup LAN8742_PHYSCSR_Bit_Definition LAN8742 PHYSCSR Bit Definition - * @{ - */ -#define LAN8742_PHYSCSR_AUTONEGO_DONE ((uint16_t)0x1000U) -#define LAN8742_PHYSCSR_HCDSPEEDMASK ((uint16_t)0x001CU) -#define LAN8742_PHYSCSR_10BT_HD ((uint16_t)0x0004U) -#define LAN8742_PHYSCSR_10BT_FD ((uint16_t)0x0014U) -#define LAN8742_PHYSCSR_100BTX_HD ((uint16_t)0x0008U) -#define LAN8742_PHYSCSR_100BTX_FD ((uint16_t)0x0018U) -/** - * @} - */ - -/** @defgroup LAN8742_Status LAN8742 Status - * @{ - */ - -#define LAN8742_STATUS_READ_ERROR ((int32_t)-5) -#define LAN8742_STATUS_WRITE_ERROR ((int32_t)-4) -#define LAN8742_STATUS_ADDRESS_ERROR ((int32_t)-3) -#define LAN8742_STATUS_RESET_TIMEOUT ((int32_t)-2) -#define LAN8742_STATUS_ERROR ((int32_t)-1) -#define LAN8742_STATUS_OK ((int32_t) 0) -#define LAN8742_STATUS_LINK_DOWN ((int32_t) 1) -#define LAN8742_STATUS_100MBITS_FULLDUPLEX ((int32_t) 2) -#define LAN8742_STATUS_100MBITS_HALFDUPLEX ((int32_t) 3) -#define LAN8742_STATUS_10MBITS_FULLDUPLEX ((int32_t) 4) -#define LAN8742_STATUS_10MBITS_HALFDUPLEX ((int32_t) 5) -#define LAN8742_STATUS_AUTONEGO_NOTDONE ((int32_t) 6) -/** - * @} - */ - -/** @defgroup LAN8742_IT_Flags LAN8742 IT Flags - * @{ - */ -#define LAN8742_WOL_IT LAN8742_INT_8 -#define LAN8742_ENERGYON_IT LAN8742_INT_7 -#define LAN8742_AUTONEGO_COMPLETE_IT LAN8742_INT_6 -#define LAN8742_REMOTE_FAULT_IT LAN8742_INT_5 -#define LAN8742_LINK_DOWN_IT LAN8742_INT_4 -#define LAN8742_AUTONEGO_LP_ACK_IT LAN8742_INT_3 -#define LAN8742_PARALLEL_DETECTION_FAULT_IT LAN8742_INT_2 -#define LAN8742_AUTONEGO_PAGE_RECEIVED_IT LAN8742_INT_1 -/** - * @} - */ - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup LAN8742_Exported_Types LAN8742 Exported Types - * @{ - */ -typedef int32_t (*lan8742_Init_Func) (void); -typedef int32_t (*lan8742_DeInit_Func) (void); -typedef int32_t (*lan8742_ReadReg_Func) (uint32_t, uint32_t, uint32_t *); -typedef int32_t (*lan8742_WriteReg_Func) (uint32_t, uint32_t, uint32_t); -typedef int32_t (*lan8742_GetTick_Func) (void); - -typedef struct -{ - lan8742_Init_Func Init; - lan8742_DeInit_Func DeInit; - lan8742_WriteReg_Func WriteReg; - lan8742_ReadReg_Func ReadReg; - lan8742_GetTick_Func GetTick; -} lan8742_IOCtx_t; - - -typedef struct -{ - uint32_t DevAddr; - uint32_t Is_Initialized; - lan8742_IOCtx_t IO; - void *pData; -}lan8742_Object_t; -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ -/** @defgroup LAN8742_Exported_Functions LAN8742 Exported Functions - * @{ - */ -int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx); -int32_t LAN8742_Init(lan8742_Object_t *pObj); -int32_t LAN8742_DeInit(lan8742_Object_t *pObj); -int32_t LAN8742_DisablePowerDownMode(lan8742_Object_t *pObj); -int32_t LAN8742_EnablePowerDownMode(lan8742_Object_t *pObj); -int32_t LAN8742_StartAutoNego(lan8742_Object_t *pObj); -int32_t LAN8742_GetLinkState(lan8742_Object_t *pObj); -int32_t LAN8742_SetLinkState(lan8742_Object_t *pObj, uint32_t LinkState); -int32_t LAN8742_EnableLoopbackMode(lan8742_Object_t *pObj); -int32_t LAN8742_DisableLoopbackMode(lan8742_Object_t *pObj); -int32_t LAN8742_EnableIT(lan8742_Object_t *pObj, uint32_t Interrupt); -int32_t LAN8742_DisableIT(lan8742_Object_t *pObj, uint32_t Interrupt); -int32_t LAN8742_ClearIT(lan8742_Object_t *pObj, uint32_t Interrupt); -int32_t LAN8742_GetITStatus(lan8742_Object_t *pObj, uint32_t Interrupt); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif -#endif /* LAN8742_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lis302dl b/Drivers/BSP/Components/lis302dl new file mode 160000 index 0000000000..3b862c1b3a --- /dev/null +++ b/Drivers/BSP/Components/lis302dl @@ -0,0 +1 @@ +Subproject commit 3b862c1b3a63bc355c52ef173e9589ccf978c852 diff --git a/Drivers/BSP/Components/lis302dl/LICENSE.md b/Drivers/BSP/Components/lis302dl/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/lis302dl/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/lis302dl/Release_Notes.html b/Drivers/BSP/Components/lis302dl/Release_Notes.html deleted file mode 100644 index 0a6245b8a9..0000000000 --- a/Drivers/BSP/Components/lis302dl/Release_Notes.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - Release Notes for LIS302DL Component Driver - - - - - - -
-
-
-

Release Notes for

-

LIS302DL Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the LIS302DL Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • lis302dl.h/.c: -
      -
    • Add mems accelerometer de-initialization function: LIS302DL_DeInit()
    • -
    • NOTE: This release must be used with BSP Common driver V4.0.0 or later
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • lis302dl.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/lis302dl/_htmresc/favicon.png b/Drivers/BSP/Components/lis302dl/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/lis302dl/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/lis302dl/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/lis302dl/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/lis302dl/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/lis302dl/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/lis302dl/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/lis302dl/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/lis302dl/lis302dl.c b/Drivers/BSP/Components/lis302dl/lis302dl.c deleted file mode 100644 index 3a427c17c1..0000000000 --- a/Drivers/BSP/Components/lis302dl/lis302dl.c +++ /dev/null @@ -1,404 +0,0 @@ -/** - ****************************************************************************** - * @file lis302dl.c - * @author MCD Application Team - * @version V2.0.0 - * @date 03-August-2015 - * @brief This file provides a set of functions needed to manage the LIS302DL - * MEMS accelerometer. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "lis302dl.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LIS302DL - * @brief This file includes the motion sensor driver for LIS302DL motion sensor - * devices. - * @{ - */ - - -/** @defgroup LIS302DL_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS302DL_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS302DL_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS302DL_Private_Variables - * @{ - */ - -ACCELERO_DrvTypeDef Lis302dlDrv = -{ - LIS302DL_Init, - LIS302DL_DeInit, - LIS302DL_ReadID, - LIS302DL_RebootCmd, - LIS302DL_Click_IntConfig, - 0, - 0, - 0, - 0, - LIS302DL_Click_IntClear, - LIS302DL_FilterConfig, - 0, - LIS302DL_ReadACC, -}; - -/** - * @} - */ - -/** @defgroup LIS302DL_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS302DL_Private_Functions - * @{ - */ - -/** - * @brief Set LIS302DL Initialization. - * @param InitStruct: contains mask of different init parameters - * @retval None - */ -void LIS302DL_Init(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Configure the low level interface */ - ACCELERO_IO_Init(); - - ctrl = (uint8_t) InitStruct; - - /* Write value to MEMS CTRL_REG1 register */ - ACCELERO_IO_Write(&ctrl, LIS302DL_CTRL_REG1_ADDR, 1); -} - -/** - * @brief LIS302DL De-Initialization. - * @param None - * @retval None. - */ -void LIS302DL_DeInit(void) -{ - -} - -/** - * @brief Read LIS302DL device ID. - * @param None - * @retval The Device ID (two bytes). - */ -uint8_t LIS302DL_ReadID(void) -{ - uint8_t tmp = 0; - - /* Configure the low level interface */ - ACCELERO_IO_Init(); - - /* Read WHO_AM_I register */ - ACCELERO_IO_Read(&tmp, LIS302DL_WHO_AM_I_ADDR, 1); - - /* Return the ID */ - return (uint16_t)tmp; -} - -/** - * @brief Set LIS302DL Internal High Pass Filter configuration. - * @param FilterStruct: contains data for filter config - * @retval None - */ -void LIS302DL_FilterConfig(uint8_t FilterStruct) -{ - uint8_t ctrl = 0x00; - - /* Read CTRL_REG2 register */ - ACCELERO_IO_Read(&ctrl, LIS302DL_CTRL_REG2_ADDR, 1); - - /* Clear high pass filter cut-off level, interrupt and data selection bits */ - ctrl &= (uint8_t)~(LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER | \ - LIS302DL_HIGHPASSFILTER_LEVEL_3 | \ - LIS302DL_HIGHPASSFILTERINTERRUPT_1_2); - - ctrl |= FilterStruct; - - /* Write value to MEMS CTRL_REG2 register */ - ACCELERO_IO_Write(&ctrl, LIS302DL_CTRL_REG2_ADDR, 1); -} - -/** - * @brief Set LIS302DL Interrupt configuration. - * @param LIS302DL_InterruptConfig_TypeDef: pointer to a LIS302DL_InterruptConfig_TypeDef - * structure that contains the configuration setting for the LIS302DL Interrupt. - * @retval None - */ -void LIS302DL_InterruptConfig(LIS302DL_InterruptConfigTypeDef *LIS302DL_IntConfigStruct) -{ - uint8_t ctrl = 0x00; - - /* Read CLICK_CFG register */ - ACCELERO_IO_Read(&ctrl, LIS302DL_CLICK_CFG_REG_ADDR, 1); - - /* Configure latch Interrupt request, click interrupts and double click interrupts */ - ctrl = (uint8_t)(LIS302DL_IntConfigStruct->Latch_Request| \ - LIS302DL_IntConfigStruct->SingleClick_Axes | \ - LIS302DL_IntConfigStruct->DoubleClick_Axes); - - /* Write value to MEMS CLICK_CFG register */ - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_CFG_REG_ADDR, 1); -} - -/** - * @brief Set LIS302DL Interrupt configuration - * @param None - * @retval None - */ -void LIS302DL_Click_IntConfig(void) -{ - uint8_t ctrl = 0x00; - LIS302DL_InterruptConfigTypeDef LIS302DL_InterruptStruct; - - ACCELERO_IO_ITConfig(); - - /* Set configuration of Internal High Pass Filter of LIS302DL */ - LIS302DL_InterruptStruct.Latch_Request = LIS302DL_INTERRUPTREQUEST_LATCHED; - LIS302DL_InterruptStruct.SingleClick_Axes = LIS302DL_CLICKINTERRUPT_Z_ENABLE; - LIS302DL_InterruptStruct.DoubleClick_Axes = LIS302DL_DOUBLECLICKINTERRUPT_Z_ENABLE; - LIS302DL_InterruptConfig(&LIS302DL_InterruptStruct); - - /* Configure Interrupt control register: enable Click interrupt on INT1 and - INT2 on Z axis high event */ - ctrl = 0x3F; - ACCELERO_IO_Write(&ctrl, LIS302DL_CTRL_REG3_ADDR, 1); - - /* Enable Interrupt generation on click on Z axis */ - ctrl = 0x50; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_CFG_REG_ADDR, 1); - - /* Configure Click Threshold on X/Y axis (10 x 0.5g) */ - ctrl = 0xAA; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_THSY_X_REG_ADDR, 1); - - /* Configure Click Threshold on Z axis (10 x 0.5g) */ - ctrl = 0x0A; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_THSZ_REG_ADDR, 1); - - /* Enable interrupt on Y axis high event */ - ctrl = 0x4C; - ACCELERO_IO_Write(&ctrl, LIS302DL_FF_WU_CFG1_REG_ADDR, 1); - - /* Configure Time Limit */ - ctrl = 0x03; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_TIMELIMIT_REG_ADDR, 1); - - /* Configure Latency */ - ctrl = 0x7F; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_LATENCY_REG_ADDR, 1); - - /* Configure Click Window */ - ctrl = 0x7F; - ACCELERO_IO_Write(&ctrl, LIS302DL_CLICK_WINDOW_REG_ADDR, 1); -} - -/** - * @brief Clear LIS302DL click Interrupt - * @param None - * @retval None - */ -void LIS302DL_Click_IntClear(void) -{ - uint8_t buffer[6], clickreg = 0; - - /* Read click and status registers if the available MEMS Accelerometer is LIS302DL */ - ACCELERO_IO_Read(&clickreg, LIS302DL_CLICK_SRC_REG_ADDR, 1); - ACCELERO_IO_Read(buffer, LIS302DL_STATUS_REG_ADDR, 6); -} - -/** - * @brief Change the lowpower mode for LIS302DL - * @param LowPowerMode: New state for the low power mode. - * This parameter can be one of the following values: - * @arg LIS302DL_LOWPOWERMODE_POWERDOWN: Power down mode - * @arg LIS302DL_LOWPOWERMODE_ACTIVE: Active mode - * @retval None - */ -void LIS302DL_LowpowerCmd(uint8_t LowPowerMode) -{ - uint8_t tmpreg; - - /* Read CTRL_REG1 register */ - ACCELERO_IO_Read(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); - - /* Set new low power mode configuration */ - tmpreg &= (uint8_t)~LIS302DL_LOWPOWERMODE_ACTIVE; - tmpreg |= LowPowerMode; - - /* Write value to MEMS CTRL_REG1 register */ - ACCELERO_IO_Write(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); -} - -/** - * @brief Data Rate command - * @param DataRateValue: Data rate value - * This parameter can be one of the following values: - * @arg LIS302DL_DATARATE_100: 100 Hz output data rate - * @arg LIS302DL_DATARATE_400: 400 Hz output data rate - * @retval None - */ -void LIS302DL_DataRateCmd(uint8_t DataRateValue) -{ - uint8_t tmpreg; - - /* Read CTRL_REG1 register */ - ACCELERO_IO_Read(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); - - /* Set new Data rate configuration */ - tmpreg &= (uint8_t)~LIS302DL_DATARATE_400; - tmpreg |= DataRateValue; - - /* Write value to MEMS CTRL_REG1 register */ - ACCELERO_IO_Write(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); -} - -/** - * @brief Change the Full Scale of LIS302DL - * @param FS_value: new full scale value. - * This parameter can be one of the following values: - * @arg LIS302DL_FULLSCALE_2_3: +-2.3g - * @arg LIS302DL_FULLSCALE_9_2: +-9.2g - * @retval None - */ -void LIS302DL_FullScaleCmd(uint8_t FS_value) -{ - uint8_t tmpreg; - - /* Read CTRL_REG1 register */ - ACCELERO_IO_Read(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); - - /* Set new full scale configuration */ - tmpreg &= (uint8_t)~LIS302DL_FULLSCALE_9_2; - tmpreg |= FS_value; - - /* Write value to MEMS CTRL_REG1 register */ - ACCELERO_IO_Write(&tmpreg, LIS302DL_CTRL_REG1_ADDR, 1); -} - -/** - * @brief Reboot memory content of LIS302DL. - * @param None - * @retval None - */ -void LIS302DL_RebootCmd(void) -{ - uint8_t tmpreg; - /* Read CTRL_REG2 register */ - ACCELERO_IO_Read(&tmpreg, LIS302DL_CTRL_REG2_ADDR, 1); - - /* Enable or Disable the reboot memory */ - tmpreg |= LIS302DL_BOOT_REBOOTMEMORY; - - /* Write value to MEMS CTRL_REG2 register */ - ACCELERO_IO_Write(&tmpreg, LIS302DL_CTRL_REG2_ADDR, 1); -} - -/** - * @brief Read LIS302DL output register, and calculate the acceleration - * ACC[mg]=SENSITIVITY* (out_h*256+out_l)/16 (12 bit rappresentation) - * @param pfData: Data out pointer - * @retval None - */ -void LIS302DL_ReadACC(int16_t *pData) -{ - int8_t buffer[6]; - int16_t pnRawData[3]; - uint8_t sensitivity = LIS302DL_SENSITIVITY_2_3G; - uint8_t crtl, i = 0x00; - - ACCELERO_IO_Read(&crtl, LIS302DL_CTRL_REG1_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)buffer, LIS302DL_OUT_X_ADDR, 6); - - for(i=0; i<3; i++) - { - pnRawData[i] = buffer[2*i]; - } - - switch(crtl & LIS302DL_FULLSCALE_9_2) - { - /* FS bit = 0 ==> Sensitivity typical value = 18milligals/digit*/ - case LIS302DL_FULLSCALE_2_3: - sensitivity = LIS302DL_SENSITIVITY_2_3G; - break; - - /* FS bit = 1 ==> Sensitivity typical value = 72milligals/digit*/ - case LIS302DL_FULLSCALE_9_2: - sensitivity = LIS302DL_SENSITIVITY_9_2G; - break; - - default: - break; - } - - /* Obtain the mg value for the three axis */ - for(i=0; i<3; i++) - { - pData[i]=(pnRawData[i] * sensitivity); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lis302dl/lis302dl.h b/Drivers/BSP/Components/lis302dl/lis302dl.h deleted file mode 100644 index 0b6f703160..0000000000 --- a/Drivers/BSP/Components/lis302dl/lis302dl.h +++ /dev/null @@ -1,701 +0,0 @@ -/** - ****************************************************************************** - * @file lis302dl.h - * @author MCD Application Team - * @version V2.0.0 - * @date 03-August-2015 - * @brief This file contains all the functions prototypes for the lis302dl.c - * firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LIS302DL_H -#define __LIS302DL_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/accelero.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LIS302DL - * @{ - */ - - -/** @defgroup LIS302DL_Exported_Types - * @{ - */ -/* LIS302DL struct */ -typedef struct -{ - uint8_t Power_Mode; /* Power-down/Active Mode */ - uint8_t Output_DataRate; /* OUT data rate 100 Hz / 400 Hz */ - uint8_t Axes_Enable; /* Axes enable */ - uint8_t Full_Scale; /* Full scale */ - uint8_t Self_Test; /* Self test */ -}LIS302DL_InitTypeDef; - -/* Interrupt struct */ -typedef struct -{ - uint8_t Latch_Request; /* Latch interrupt request into CLICK_SRC register*/ - uint8_t SingleClick_Axes; /* Single Click Axes Interrupts */ - uint8_t DoubleClick_Axes; /* Double Click Axes Interrupts */ -}LIS302DL_InterruptConfigTypeDef; - -/* High Pass Filter struct */ -typedef struct -{ - uint8_t HighPassFilter_Data_Selection; /* Internal filter bypassed or data from internal filter send to output register*/ - uint8_t HighPassFilter_CutOff_Frequency; /* High pass filter cut-off frequency */ - uint8_t HighPassFilter_Interrupt; /* High pass filter enabled for Freefall/WakeUp #1 or #2 */ -}LIS302DL_FilterConfigTypeDef; - -/** - * @} - */ - -/** @defgroup LIS302DL_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ - -/******************************************************************************* -* WHO_AM_I Register: Device Identification Register -* Read only register -* Default value: 0x3B -*******************************************************************************/ -#define LIS302DL_WHO_AM_I_ADDR 0x0F - -/******************************************************************************* -* CTRL_REG1 Register: Control Register 1 -* Read Write register -* Default value: 0x07 -* 7 DR: Data Rate selection. -* 0 - 100 Hz output data rate -* 1 - 400 Hz output data rate -* 6 PD: Power Down control. -* 0 - power down mode -* 1 - active mode -* 5 FS: Full Scale selection. -* 0 - Typical measurement range 2.3 -* 1 - Typical measurement range 9.2 -* 4:3 STP-STM Self Test Enable: -* STP | STM | mode -* ---------------------------- -* 0 | 0 | Normal mode -* 0 | 1 | Self Test M -* 1 | 0 | Self Test P -* 2 Zen: Z axis enable. -* 0 - Z axis disabled -* 1- Z axis enabled -* 1 Yen: Y axis enable. -* 0 - Y axis disabled -* 1- Y axis enabled -* 0 Xen: X axis enable. -* 0 - X axis disabled -* 1- X axis enabled -*******************************************************************************/ -#define LIS302DL_CTRL_REG1_ADDR 0x20 - -/******************************************************************************* -* CTRL_REG2 Regsiter: Control Register 2 -* Read Write register -* Default value: 0x00 -* 7 SIM: SPI Serial Interface Mode Selection. -* 0 - 4 wire interface -* 1 - 3 wire interface -* 6 BOOT: Reboot memory content -* 0 - normal mode -* 1 - reboot memory content -* 5 Reserved -* 4 FDS: Filtered data selection. -* 0 - internal filter bypassed -* 1 - data from internal filter sent to output register -* 3 HP FF_WU2: High pass filter enabled for FreeFall/WakeUp#2. -* 0 - filter bypassed -* 1 - filter enabled -* 2 HP FF_WU1: High pass filter enabled for FreeFall/WakeUp#1. -* 0 - filter bypassed -* 1 - filter enabled -* 1:0 HP coeff2-HP coeff1 High pass filter cut-off frequency (ft) configuration. -* ft= ODR[hz]/6*HP coeff -* HP coeff2 | HP coeff1 | HP coeff -* ------------------------------------------- -* 0 | 0 | 8 -* 0 | 1 | 16 -* 1 | 0 | 32 -* 1 | 1 | 64 -* HP coeff | ft[hz] | ft[hz] | -* |ODR 100Hz | ODR 400Hz | -* -------------------------------------------- -* 00 | 2 | 8 | -* 01 | 1 | 4 | -* 10 | 0.5 | 2 | -* 11 | 0.25 | 1 | -*******************************************************************************/ -#define LIS302DL_CTRL_REG2_ADDR 0x21 - -/******************************************************************************* -* CTRL_REG3 Register: Interrupt Control Register -* Read Write register -* Default value: 0x00 -* 7 IHL active: Interrupt active high/low. -* 0 - active high -* 1 - active low -* 6 PP_OD: push-pull/open-drain. -* 0 - push-pull -* 1 - open-drain -* 5:3 I2_CFG2 - I2_CFG0 Data signal on INT2 pad control bits -* 2:0 I1_CFG2 - I1_CFG0 Data signal on INT1 pad control bits -* I1(2)_CFG2 | I1(2)_CFG1 | I1(2)_CFG0 | INT1(2) Pad -* ---------------------------------------------------------- -* 0 | 0 | 0 | GND -* 0 | 0 | 1 | FreeFall/WakeUp#1 -* 0 | 1 | 0 | FreeFall/WakeUp#2 -* 0 | 1 | 1 | FreeFall/WakeUp#1 or FreeFall/WakeUp#2 -* 1 | 0 | 0 | Data ready -* 1 | 1 | 1 | Click interrupt -*******************************************************************************/ -#define LIS302DL_CTRL_REG3_ADDR 0x22 - -/******************************************************************************* -* HP_FILTER_RESET Register: Dummy register. Reading at this address zeroes -* instantaneously the content of the internal high pass filter. If the high pass -* filter is enabled all three axes are instantaneously set to 0g. -* This allows to overcome the settling time of the high pass filter. -* Read only register -* Default value: Dummy -*******************************************************************************/ -#define LIS302DL_HP_FILTER_RESET_REG_ADDR 0x23 - -/******************************************************************************* -* STATUS_REG Register: Status Register -* Default value: 0x00 -* 7 ZYXOR: X, Y and Z axis data overrun. -* 0: no overrun has occurred -* 1: new data has overwritten the previous one before it was read -* 6 ZOR: Z axis data overrun. -* 0: no overrun has occurred -* 1: new data for Z-axis has overwritten the previous one before it was read -* 5 yOR: y axis data overrun. -* 0: no overrun has occurred -* 1: new data for y-axis has overwritten the previous one before it was read -* 4 XOR: X axis data overrun. -* 0: no overrun has occurred -* 1: new data for X-axis has overwritten the previous one before it was read -* 3 ZYXDA: X, Y and Z axis new data available -* 0: a new set of data is not yet available -* 1: a new set of data is available -* 2 ZDA: Z axis new data available. -* 0: a new set of data is not yet available -* 1: a new data for Z axis is available -* 1 YDA: Y axis new data available -* 0: a new set of data is not yet available -* 1: a new data for Y axis is available -* 0 XDA: X axis new data available -* 0: a new set of data is not yet available -* 1: a new data for X axis is available -*******************************************************************************/ -#define LIS302DL_STATUS_REG_ADDR 0x27 - -/******************************************************************************* -* OUT_X Register: X-axis output Data -* Read only register -* Default value: output -* 7:0 XD7-XD0: X-axis output Data -*******************************************************************************/ -#define LIS302DL_OUT_X_ADDR 0x29 - -/******************************************************************************* -* OUT_Y Register: Y-axis output Data -* Read only register -* Default value: output -* 7:0 YD7-YD0: Y-axis output Data -*******************************************************************************/ -#define LIS302DL_OUT_Y_ADDR 0x2B - -/******************************************************************************* -* OUT_Z Register: Z-axis output Data -* Read only register -* Default value: output -* 7:0 ZD7-ZD0: Z-axis output Data -*******************************************************************************/ -#define LIS302DL_OUT_Z_ADDR 0x2D - -/******************************************************************************* -* FF_WW_CFG_1 Register: Configuration register for Interrupt 1 source. -* Read write register -* Default value: 0x00 -* 7 AOI: AND/OR combination of Interrupt events. -* 0: OR combination of interrupt events -* 1: AND combination of interrupt events -* 6 LIR: Latch/not latch interrupt request -* 0: interrupt request not latched -* 1: interrupt request latched -* 5 ZHIE: Enable interrupt generation on Z high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 4 ZLIE: Enable interrupt generation on Z low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -* 3 YHIE: Enable interrupt generation on Y high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 2 YLIE: Enable interrupt generation on Y low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -* 1 XHIE: Enable interrupt generation on X high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 0 XLIE: Enable interrupt generation on X low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -*******************************************************************************/ -#define LIS302DL_FF_WU_CFG1_REG_ADDR 0x30 - -/******************************************************************************* -* FF_WU_SRC_1 Register: Interrupt 1 source register. -* Reading at this address clears FF_WU_SRC_1 register and the FF, WU 1 interrupt -* and allow the refreshment of data in the FF_WU_SRC_1 register if the latched option -* was chosen. -* Read only register -* Default value: 0x00 -* 7 Reserved -* 6 IA: Interrupt active. -* 0: no interrupt has been generated -* 1: one or more interrupts have been generated -* 5 ZH: Z high. -* 0: no interrupt -* 1: ZH event has occurred -* 4 ZL: Z low. -* 0: no interrupt -* 1: ZL event has occurred -* 3 YH: Y high. -* 0: no interrupt -* 1: YH event has occurred -* 2 YL: Y low. -* 0: no interrupt -* 1: YL event has occurred -* 1 YH: X high. -* 0: no interrupt -* 1: XH event has occurred -* 0 YL: X low. -* 0: no interrupt -* 1: XL event has occurred -*******************************************************************************/ -#define LIS302DL_FF_WU_SRC1_REG_ADDR 0x31 - -/******************************************************************************* -* FF_WU_THS_1 Register: Threshold register -* Read Write register -* Default value: 0x00 -* 7 DCRM: Reset mode selection. -* 0 - counter resetted -* 1 - counter decremented -* 6 THS6-THS0: Free-fall/wake-up threshold value. -*******************************************************************************/ -#define LIS302DL_FF_WU_THS1_REG_ADDR 0x32 - -/******************************************************************************* -* FF_WU_DURATION_1 Register: duration Register -* Read Write register -* Default value: 0x00 -* 7:0 D7-D0 Duration value. (Duration steps and maximum values depend on the ODR chosen) - ******************************************************************************/ -#define LIS302DL_FF_WU_DURATION1_REG_ADDR 0x33 - -/******************************************************************************* -* FF_WW_CFG_2 Register: Configuration register for Interrupt 2 source. -* Read write register -* Default value: 0x00 -* 7 AOI: AND/OR combination of Interrupt events. -* 0: OR combination of interrupt events -* 1: AND combination of interrupt events -* 6 LIR: Latch/not latch interrupt request -* 0: interrupt request not latched -* 1: interrupt request latched -* 5 ZHIE: Enable interrupt generation on Z high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 4 ZLIE: Enable interrupt generation on Z low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -* 3 YHIE: Enable interrupt generation on Y high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 2 YLIE: Enable interrupt generation on Y low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -* 1 XHIE: Enable interrupt generation on X high event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value higher than preset threshold -* 0 XLIE: Enable interrupt generation on X low event. -* 0: disable interrupt request -* 1: enable interrupt request on measured accel. value lower than preset threshold -*******************************************************************************/ -#define LIS302DL_FF_WU_CFG2_REG_ADDR 0x34 - -/******************************************************************************* -* FF_WU_SRC_2 Register: Interrupt 2 source register. -* Reading at this address clears FF_WU_SRC_2 register and the FF, WU 2 interrupt -* and allow the refreshment of data in the FF_WU_SRC_2 register if the latched option -* was chosen. -* Read only register -* Default value: 0x00 -* 7 Reserved -* 6 IA: Interrupt active. -* 0: no interrupt has been generated -* 1: one or more interrupts have been generated -* 5 ZH: Z high. -* 0: no interrupt -* 1: ZH event has occurred -* 4 ZL: Z low. -* 0: no interrupt -* 1: ZL event has occurred -* 3 YH: Y high. -* 0: no interrupt -* 1: YH event has occurred -* 2 YL: Y low. -* 0: no interrupt -* 1: YL event has occurred -* 1 YH: X high. -* 0: no interrupt -* 1: XH event has occurred -* 0 YL: X low. -* 0: no interrupt -* 1: XL event has occurred -*******************************************************************************/ -#define LIS302DL_FF_WU_SRC2_REG_ADDR 0x35 - -/******************************************************************************* -* FF_WU_THS_2 Register: Threshold register -* Read Write register -* Default value: 0x00 -* 7 DCRM: Reset mode selection. -* 0 - counter resetted -* 1 - counter decremented -* 6 THS6-THS0: Free-fall/wake-up threshold value. -*******************************************************************************/ -#define LIS302DL_FF_WU_THS2_REG_ADDR 0x36 - -/******************************************************************************* -* FF_WU_DURATION_2 Register: duration Register -* Read Write register -* Default value: 0x00 -* 7:0 D7-D0 Duration value. (Duration steps and maximum values depend on the ODR chosen) - ******************************************************************************/ -#define LIS302DL_FF_WU_DURATION2_REG_ADDR 0x37 - -/****************************************************************************** -* CLICK_CFG Register: click Register -* Read Write register -* Default value: 0x00 -* 7 Reserved -* 6 LIR: Latch Interrupt request. -* 0: interrupt request not latched -* 1: interrupt request latched -* 5 Double_Z: Enable interrupt generation on double click event on Z axis. -* 0: disable interrupt request -* 1: enable interrupt request -* 4 Single_Z: Enable interrupt generation on single click event on Z axis. -* 0: disable interrupt request -* 1: enable interrupt request -* 3 Double_Y: Enable interrupt generation on double click event on Y axis. -* 0: disable interrupt request -* 1: enable interrupt request -* 2 Single_Y: Enable interrupt generation on single click event on Y axis. -* 0: disable interrupt request -* 1: enable interrupt request -* 1 Double_X: Enable interrupt generation on double click event on X axis. -* 0: disable interrupt request -* 1: enable interrupt request -* 0 Single_y: Enable interrupt generation on single click event on X axis. -* 0: disable interrupt request -* 1: enable interrupt request - ******************************************************************************/ -#define LIS302DL_CLICK_CFG_REG_ADDR 0x38 - -/****************************************************************************** -* CLICK_SRC Register: click status Register -* Read only register -* Default value: 0x00 -* 7 Reserved -* 6 IA: Interrupt active. -* 0: no interrupt has been generated -* 1: one or more interrupts have been generated -* 5 Double_Z: Double click on Z axis event. -* 0: no interrupt -* 1: Double Z event has occurred -* 4 Single_Z: Z low. -* 0: no interrupt -* 1: Single Z event has occurred -* 3 Double_Y: Y high. -* 0: no interrupt -* 1: Double Y event has occurred -* 2 Single_Y: Y low. -* 0: no interrupt -* 1: Single Y event has occurred -* 1 Double_X: X high. -* 0: no interrupt -* 1: Double X event has occurred -* 0 Single_X: X low. -* 0: no interrupt -* 1: Single X event has occurred -*******************************************************************************/ -#define LIS302DL_CLICK_SRC_REG_ADDR 0x39 - -/******************************************************************************* -* CLICK_THSY_X Register: Click threshold Y and X register -* Read Write register -* Default value: 0x00 -* 7:4 THSy3-THSy0: Click threshold on Y axis, step 0.5g -* 3:0 THSx3-THSx0: Click threshold on X axis, step 0.5g -*******************************************************************************/ -#define LIS302DL_CLICK_THSY_X_REG_ADDR 0x3B - -/******************************************************************************* -* CLICK_THSZ Register: Click threshold Z register -* Read Write register -* Default value: 0x00 -* 7:4 Reserved -* 3:0 THSz3-THSz0: Click threshold on Z axis, step 0.5g -*******************************************************************************/ -#define LIS302DL_CLICK_THSZ_REG_ADDR 0x3C - -/******************************************************************************* -* CLICK_TimeLimit Register: Time Limit register -* Read Write register -* Default value: 0x00 -* 7:0 Dur7-Dur0: Time Limit value, step 0.5g -*******************************************************************************/ -#define LIS302DL_CLICK_TIMELIMIT_REG_ADDR 0x3D - -/******************************************************************************* -* CLICK_Latency Register: Latency register -* Read Write register -* Default value: 0x00 -* 7:0 Lat7-Lat0: Latency value, step 1msec -*******************************************************************************/ -#define LIS302DL_CLICK_LATENCY_REG_ADDR 0x3E - -/******************************************************************************* -* CLICK_Window Register: Window register -* Read Write register -* Default value: 0x00 -* 7:0 Win7-Win0: Window value, step 1msec -*******************************************************************************/ -#define LIS302DL_CLICK_WINDOW_REG_ADDR 0x3F - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ -#define I_AM_LIS302DL 0x3B - -#define LIS302DL_SENSITIVITY_2_3G 18 /* 18 mg/digit*/ -#define LIS302DL_SENSITIVITY_9_2G 72 /* 72 mg/digit*/ - -/** @defgroup Data_Rate_selection - * @{ - */ -#define LIS302DL_DATARATE_100 ((uint8_t)0x00) -#define LIS302DL_DATARATE_400 ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Power_Mode_selection - * @{ - */ -#define LIS302DL_LOWPOWERMODE_POWERDOWN ((uint8_t)0x00) -#define LIS302DL_LOWPOWERMODE_ACTIVE ((uint8_t)0x40) -/** - * @} - */ - -/** @defgroup Full_Scale_selection - * @{ - */ -#define LIS302DL_FULLSCALE_2_3 ((uint8_t)0x00) -#define LIS302DL_FULLSCALE_9_2 ((uint8_t)0x20) -/** - * @} - */ - -/** @defgroup Self_Test_selection - * @{ - */ -#define LIS302DL_SELFTEST_NORMAL ((uint8_t)0x00) -#define LIS302DL_SELFTEST_P ((uint8_t)0x10) -#define LIS302DL_SELFTEST_M ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Direction_XYZ_selection - * @{ - */ -#define LIS302DL_X_ENABLE ((uint8_t)0x01) -#define LIS302DL_Y_ENABLE ((uint8_t)0x02) -#define LIS302DL_Z_ENABLE ((uint8_t)0x04) -#define LIS302DL_XYZ_ENABLE ((uint8_t)0x07) -/** - * @} - */ - - /** @defgroup SPI_Serial_Interface_Mode_selection - * @{ - */ -#define LIS302DL_SERIALINTERFACE_4WIRE ((uint8_t)0x00) -#define LIS302DL_SERIALINTERFACE_3WIRE ((uint8_t)0x80) -/** - * @} - */ - - /** @defgroup Boot_Mode_selection - * @{ - */ -#define LIS302DL_BOOT_NORMALMODE ((uint8_t)0x00) -#define LIS302DL_BOOT_REBOOTMEMORY ((uint8_t)0x40) -/** - * @} - */ - - /** @defgroup Filtered_Data_Selection_Mode_selection - * @{ - */ -#define LIS302DL_FILTEREDDATASELECTION_BYPASSED ((uint8_t)0x00) -#define LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER ((uint8_t)0x20) -/** - * @} - */ - - /** @defgroup High_Pass_Filter_Interrupt_selection - * @{ - */ -#define LIS302DL_HIGHPASSFILTERINTERRUPT_OFF ((uint8_t)0x00) -#define LIS302DL_HIGHPASSFILTERINTERRUPT_1 ((uint8_t)0x04) -#define LIS302DL_HIGHPASSFILTERINTERRUPT_2 ((uint8_t)0x08) -#define LIS302DL_HIGHPASSFILTERINTERRUPT_1_2 ((uint8_t)0x0C) -/** - * @} - */ - - /** @defgroup High_Pass_Filter_selection - * @{ - */ -#define LIS302DL_HIGHPASSFILTER_LEVEL_0 ((uint8_t)0x00) -#define LIS302DL_HIGHPASSFILTER_LEVEL_1 ((uint8_t)0x01) -#define LIS302DL_HIGHPASSFILTER_LEVEL_2 ((uint8_t)0x02) -#define LIS302DL_HIGHPASSFILTER_LEVEL_3 ((uint8_t)0x03) -/** - * @} - */ - -/** @defgroup latch_Interrupt_Request_selection - * @{ - */ -#define LIS302DL_INTERRUPTREQUEST_NOTLATCHED ((uint8_t)0x00) -#define LIS302DL_INTERRUPTREQUEST_LATCHED ((uint8_t)0x40) -/** - * @} - */ - -/** @defgroup Click_Interrupt_XYZ_selection - * @{ - */ -#define LIS302DL_CLICKINTERRUPT_XYZ_DISABLE ((uint8_t)0x00) -#define LIS302DL_CLICKINTERRUPT_X_ENABLE ((uint8_t)0x01) -#define LIS302DL_CLICKINTERRUPT_Y_ENABLE ((uint8_t)0x04) -#define LIS302DL_CLICKINTERRUPT_Z_ENABLE ((uint8_t)0x10) -#define LIS302DL_CLICKINTERRUPT_XYZ_ENABLE ((uint8_t)0x15) -/** - * @} - */ - -/** @defgroup Double_Click_Interrupt_XYZ_selection - * @{ - */ -#define LIS302DL_DOUBLECLICKINTERRUPT_XYZ_DISABLE ((uint8_t)0x00) -#define LIS302DL_DOUBLECLICKINTERRUPT_X_ENABLE ((uint8_t)0x02) -#define LIS302DL_DOUBLECLICKINTERRUPT_Y_ENABLE ((uint8_t)0x08) -#define LIS302DL_DOUBLECLICKINTERRUPT_Z_ENABLE ((uint8_t)0x20) -#define LIS302DL_DOUBLECLICKINTERRUPT_XYZ_ENABLE ((uint8_t)0x2A) -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup LIS302DL_Exported_Functions - * @{ - */ -void LIS302DL_Init(uint16_t InitStruct); -void LIS302DL_DeInit(void); -uint8_t LIS302DL_ReadID(void); -void LIS302DL_FilterConfig(uint8_t FilterStruct); -void LIS302DL_InterruptConfig(LIS302DL_InterruptConfigTypeDef *LIS302DL_IntConfigStruct); -void LIS302DL_Click_IntConfig(void); -void LIS302DL_Click_IntClear(void); -void LIS302DL_LowpowerCmd(uint8_t LowPowerMode); -void LIS302DL_FullScaleCmd(uint8_t FS_value); -void LIS302DL_DataRateCmd(uint8_t DataRateValue); -void LIS302DL_RebootCmd(void); -void LIS302DL_ReadACC(int16_t *pData); - -/* Accelerometer driver structure */ -extern ACCELERO_DrvTypeDef Lis302dlDrv; - -/* Accelerometer IO functions */ -void ACCELERO_IO_Init(void); -void ACCELERO_IO_ITConfig(void); -void ACCELERO_IO_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite); -void ACCELERO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead); - -#ifdef __cplusplus -} -#endif - -#endif /* __LIS302DL_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lis3dsh b/Drivers/BSP/Components/lis3dsh new file mode 160000 index 0000000000..54c73eb4d3 --- /dev/null +++ b/Drivers/BSP/Components/lis3dsh @@ -0,0 +1 @@ +Subproject commit 54c73eb4d38a37d949af9bf3fd774d98b684e27d diff --git a/Drivers/BSP/Components/lis3dsh/LICENSE.md b/Drivers/BSP/Components/lis3dsh/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/lis3dsh/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/lis3dsh/Release_Notes.html b/Drivers/BSP/Components/lis3dsh/Release_Notes.html deleted file mode 100644 index b882578d28..0000000000 --- a/Drivers/BSP/Components/lis3dsh/Release_Notes.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - Release Notes for LIS3DSH Component Driver - - - - - - -
-
-
-

Release Notes for

-

LIS3DSH Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the LIS3DSH Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • lis3dsh.h/c: -
      -
    • Add mems accelerometer de-initialization function: LIS3DSH_DeInit()
    • -
    • NOTE: This release must be used with BSP Common driver V4.0.0 or later
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • lis3dsh.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/lis3dsh/_htmresc/favicon.png b/Drivers/BSP/Components/lis3dsh/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/lis3dsh/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/lis3dsh/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/lis3dsh/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/lis3dsh/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/lis3dsh/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/lis3dsh/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/lis3dsh/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/lis3dsh/lis3dsh.c b/Drivers/BSP/Components/lis3dsh/lis3dsh.c deleted file mode 100644 index 29cfdcc997..0000000000 --- a/Drivers/BSP/Components/lis3dsh/lis3dsh.c +++ /dev/null @@ -1,412 +0,0 @@ -/** - ****************************************************************************** - * @file lis3dsh.c - * @author MCD Application Team - * @version V2.0.0 - * @date 03-August-2015 - * @brief This file provides a set of functions needed to manage the LIS3DSH - * MEMS Accelerometer. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "lis3dsh.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LIS3DSH - * @brief This file includes the motion sensor driver for LIS3DSH motion sensor - * devices. - * @{ - */ - -/** @defgroup LIS3DSH_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Private_Variables - * @{ - */ -ACCELERO_DrvTypeDef Lis3dshDrv = -{ - LIS3DSH_Init, - LIS3DSH_DeInit, - LIS3DSH_ReadID, - LIS3DSH_RebootCmd, - LIS3DSH_Click_IntConfig, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - LIS3DSH_ReadACC, -}; - -/** - * @} - */ - -/** @defgroup LIS3DSH_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Private_Functions - * @{ - */ - -/** - * @brief Set LIS3DSH Initialization. - * @param InitStruct: contains mask of different init parameters - * @retval None - */ -void LIS3DSH_Init(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Configure the low level interface */ - ACCELERO_IO_Init(); - - /* Configure MEMS: power mode(ODR) and axes enable */ - ctrl = (uint8_t) (InitStruct); - - /* Write value to MEMS CTRL_REG4 register */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_CTRL_REG4_ADDR, 1); - - /* Configure MEMS: full scale and self test */ - ctrl = (uint8_t) (InitStruct >> 8); - - /* Write value to MEMS CTRL_REG5 register */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_CTRL_REG5_ADDR, 1); -} - -/** - * @brief LIS3DSH De-Initialization. - * @param None - * @retval None. - */ -void LIS3DSH_DeInit(void) -{ - -} - -/** - * @brief Read LIS3DSH device ID. - * @param None - * @retval The Device ID (two bytes). - */ -uint8_t LIS3DSH_ReadID(void) -{ - uint8_t tmp = 0; - - /* Configure the low level interface */ - ACCELERO_IO_Init(); - - /* Read WHO_AM_I register */ - ACCELERO_IO_Read(&tmp, LIS3DSH_WHO_AM_I_ADDR, 1); - - /* Return the ID */ - return (uint16_t)tmp; -} - -/** - * @brief Set LIS3DSH Interrupt configuration - * @param LIS3DSH_InterruptConfig_TypeDef: pointer to a LIS3DSH_InterruptConfig_TypeDef - * structure that contains the configuration setting for the LIS3DSH Interrupt. - * @retval None - */ -void LIS3DSH_InterruptConfig(LIS3DSH_InterruptConfigTypeDef *LIS3DSH_IntConfigStruct) -{ - uint8_t ctrl = 0x00; - - /* Configure Interrupt Selection , Request and Signal */ - ctrl = (uint8_t)(LIS3DSH_IntConfigStruct->Interrupt_Selection_Enable | \ - LIS3DSH_IntConfigStruct->Interrupt_Request | \ - LIS3DSH_IntConfigStruct->Interrupt_Signal); - - /* Write value to MEMS CTRL_REG3 register */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_CTRL_REG3_ADDR, 1); - - /* Configure State Machine 1 */ - ctrl = (uint8_t)(LIS3DSH_IntConfigStruct->State_Machine1_Enable | \ - LIS3DSH_IntConfigStruct->State_Machine1_Interrupt); - - /* Write value to MEMS CTRL_REG1 register */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_CTRL_REG1_ADDR, 1); - - /* Configure State Machine 2 */ - ctrl = (uint8_t)(LIS3DSH_IntConfigStruct->State_Machine2_Enable | \ - LIS3DSH_IntConfigStruct->State_Machine2_Interrupt); - - /* Write value to MEMS CTRL_REG2 register */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_CTRL_REG2_ADDR, 1); -} - -/** - * @brief Set LIS3DSH for click detection - * @param None - * @retval None - */ -void LIS3DSH_Click_IntConfig(void) -{ - uint8_t ctrl = 0x00; - LIS3DSH_InterruptConfigTypeDef LIS3DSH_InterruptStruct; - - ACCELERO_IO_ITConfig(); - - /* Set LIS3DSH Interrupt configuration */ - LIS3DSH_InterruptStruct.Interrupt_Selection_Enable = LIS3DSH_INTERRUPT_2_ENABLE; - LIS3DSH_InterruptStruct.Interrupt_Request = LIS3DSH_INTERRUPT_REQUEST_LATCHED; - LIS3DSH_InterruptStruct.Interrupt_Signal = LIS3DSH_INTERRUPT_SIGNAL_HIGH; - LIS3DSH_InterruptStruct.State_Machine1_Enable = LIS3DSH_SM_DISABLE; - LIS3DSH_InterruptStruct.State_Machine2_Enable = LIS3DSH_SM_ENABLE; - LIS3DSH_InterruptStruct.State_Machine2_Interrupt = LIS3DSH_SM_INT1; - LIS3DSH_InterruptConfig(&LIS3DSH_InterruptStruct); - - /* Set LIS3DSH State Machines configuration */ - ctrl=0x03; - ACCELERO_IO_Write(&ctrl, LIS3DSH_TIM2_1_L_ADDR,1); - ctrl=0xC8; - ACCELERO_IO_Write(&ctrl, LIS3DSH_TIM1_1_L_ADDR,1); - ctrl=0x45; - ACCELERO_IO_Write(&ctrl, LIS3DSH_THRS2_1_ADDR,1); - ctrl=0xFC; - ACCELERO_IO_Write(&ctrl, LIS3DSH_MASK1_A_ADDR,1); - ctrl=0xA1; - ACCELERO_IO_Write(&ctrl, LIS3DSH_SETT1_ADDR,1); - ctrl=0x01; - ACCELERO_IO_Write(&ctrl, LIS3DSH_PR1_ADDR,1); - - ACCELERO_IO_Write(&ctrl, LIS3DSH_SETT2_ADDR,1); - - /* Configure State Machine 2 to detect single click */ - ACCELERO_IO_Write(&ctrl, LIS3DSH_ST2_1_ADDR,1); - ctrl=0x06; - ACCELERO_IO_Write(&ctrl, LIS3DSH_ST2_2_ADDR,1); - ctrl=0x28; - ACCELERO_IO_Write(&ctrl, LIS3DSH_ST2_3_ADDR,1); - ctrl=0x11; - ACCELERO_IO_Write(&ctrl, LIS3DSH_ST2_4_ADDR,1); -} - -/** - * @brief Change the lowpower mode for LIS3DSH. - * @param LowPowerMode: new state for the lowpower mode. - * This parameter can be one of the following values: - * @arg LIS3DSH_DATARATE_POWERDOWN: Power down mode - * @arg LIS3DSH_DATARATE_3_125: Normal mode. ODR: 3.125 Hz - * @arg LIS3DSH_DATARATE_6_25: Normal mode. ODR: 6.25 Hz - * @arg LIS3DSH_DATARATE_12_5: Normal mode. ODR: 12.5 Hz - * @arg LIS3DSH_DATARATE_25: Normal mode. ODR: 25 Hz - * @arg LIS3DSH_DATARATE_50: Normal mode. ODR: 50 Hz - * @arg LIS3DSH_DATARATE_100: Normal mode. ODR: 100 Hz - * @arg LIS3DSH_DATARATE_400: Normal mode. ODR: 400 Hz - * @arg LIS3DSH_DATARATE_800: Normal mode. ODR: 800 Hz - * @arg LIS3DSH_DATARATE_1600: Normal mode. ODR: 1600 Hz - * @retval None - */ -void LIS3DSH_ODR_LowpowerCmd(uint8_t ODR_LowPowerMode) -{ - uint8_t tmpreg; - - /* Read CTRL_REG4 register */ - ACCELERO_IO_Read(&tmpreg, LIS3DSH_CTRL_REG4_ADDR, 1); - - /* Set new low power mode configuration */ - tmpreg &= (uint8_t)~LIS3DSH_DATARATE_100; - tmpreg |= ODR_LowPowerMode; - - /* Write value to MEMS CTRL_REG4 register */ - ACCELERO_IO_Write(&tmpreg, LIS3DSH_CTRL_REG4_ADDR, 1); -} - -/** - * @brief Data Rate command. - * @param DataRateValue: Data rate value. - * This parameter can be one of the following values: - * @arg LIS3DSH_DATARATE_3_125: 3.125 Hz output data rate - * @arg LIS3DSH_DATARATE_6_25: 6.25 Hz output data rate - * @arg LIS3DSH_DATARATE_12_5: 12.5 Hz output data rate - * @arg LIS3DSH_DATARATE_25: 25 Hz output data rate - * @arg LIS3DSH_DATARATE_50: 50 Hz output data rate - * @arg LIS3DSH_DATARATE_100: 100 Hz output data rate - * @arg LIS3DSH_DATARATE_400: 400 Hz output data rate - * @arg LIS3DSH_DATARATE_800: 800 Hz output data rate - * @arg LIS3DSH_DATARATE_1600: 1600 Hz output data rate - * @retval None - */ -void LIS3DSH_DataRateCmd(uint8_t DataRateValue) -{ - uint8_t tmpreg; - - /* Read CTRL_REG4 register */ - ACCELERO_IO_Read(&tmpreg, LIS3DSH_CTRL_REG4_ADDR, 1); - - /* Set new data rate configuration from 100 to 400Hz */ - tmpreg &= (uint8_t)~LIS3DSH_DATARATE_400; - tmpreg |= DataRateValue; - - /* Write value to MEMS CTRL_REG4 register */ - ACCELERO_IO_Write(&tmpreg, LIS3DSH_CTRL_REG4_ADDR, 1); -} - -/** - * @brief Change the Full Scale of LIS3DSH. - * @param FS_value: new full scale value. - * This parameter can be one of the following values: - * @arg LIS3DSH_FULLSCALE_2: +-2g - * @arg LIS3DSH_FULLSCALE_4: +-4g - * @arg LIS3DSH_FULLSCALE_6: +-6g - * @arg LIS3DSH_FULLSCALE_8: +-8g - * @arg LIS3DSH_FULLSCALE_16: +-16g - * @retval None - */ -void LIS3DSH_FullScaleCmd(uint8_t FS_value) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - ACCELERO_IO_Read(&tmpreg, LIS3DSH_CTRL_REG5_ADDR, 1); - - /* Set new full scale configuration */ - tmpreg &= (uint8_t)~LIS3DSH_FULLSCALE_16; - tmpreg |= FS_value; - - /* Write value to MEMS CTRL_REG5 register */ - ACCELERO_IO_Write(&tmpreg, LIS3DSH_CTRL_REG5_ADDR, 1); -} - -/** - * @brief Reboot memory content of LIS3DSH. - * @param None - * @retval None - */ -void LIS3DSH_RebootCmd(void) -{ - uint8_t tmpreg; - /* Read CTRL_REG6 register */ - ACCELERO_IO_Read(&tmpreg, LIS3DSH_CTRL_REG6_ADDR, 1); - - /* Enable or Disable the reboot memory */ - tmpreg |= LIS3DSH_BOOT_FORCED; - - /* Write value to MEMS CTRL_REG6 register */ - ACCELERO_IO_Write(&tmpreg, LIS3DSH_CTRL_REG6_ADDR, 1); -} - -/** - * @brief Read LIS3DSH output register, and calculate the acceleration - * ACC[mg]=SENSITIVITY* (out_h*256+out_l)/16 (12 bit representation). - * @param pointer on floating buffer. - * @retval None - */ -void LIS3DSH_ReadACC(int16_t *pData) -{ - int8_t buffer[6]; - uint8_t crtl, i = 0x00; - float sensitivity = LIS3DSH_SENSITIVITY_0_06G; - float valueinfloat = 0; - - ACCELERO_IO_Read(&crtl, LIS3DSH_CTRL_REG5_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[0], LIS3DSH_OUT_X_L_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[1], LIS3DSH_OUT_X_H_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[2], LIS3DSH_OUT_Y_L_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[3], LIS3DSH_OUT_Y_H_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[4], LIS3DSH_OUT_Z_L_ADDR, 1); - ACCELERO_IO_Read((uint8_t*)&buffer[5], LIS3DSH_OUT_Z_H_ADDR, 1); - - switch(crtl & LIS3DSH__FULLSCALE_SELECTION) - { - /* FS bit = 000 ==> Sensitivity typical value = 0.06milligals/digit */ - case LIS3DSH_FULLSCALE_2: - sensitivity = LIS3DSH_SENSITIVITY_0_06G; - break; - - /* FS bit = 001 ==> Sensitivity typical value = 0.12milligals/digit */ - case LIS3DSH_FULLSCALE_4: - sensitivity = LIS3DSH_SENSITIVITY_0_12G; - break; - - /* FS bit = 010 ==> Sensitivity typical value = 0.18milligals/digit */ - case LIS3DSH_FULLSCALE_6: - sensitivity = LIS3DSH_SENSITIVITY_0_18G; - break; - - /* FS bit = 011 ==> Sensitivity typical value = 0.24milligals/digit */ - case LIS3DSH_FULLSCALE_8: - sensitivity = LIS3DSH_SENSITIVITY_0_24G; - break; - - /* FS bit = 100 ==> Sensitivity typical value = 0.73milligals/digit */ - case LIS3DSH_FULLSCALE_16: - sensitivity = LIS3DSH_SENSITIVITY_0_73G; - break; - - default: - break; - } - - /* Obtain the mg value for the three axis */ - for(i=0; i<3; i++) - { - valueinfloat = ((buffer[2*i+1] << 8) + buffer[2*i]) * sensitivity; - pData[i] = (int16_t)valueinfloat; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lis3dsh/lis3dsh.h b/Drivers/BSP/Components/lis3dsh/lis3dsh.h deleted file mode 100644 index fc5f0b9b68..0000000000 --- a/Drivers/BSP/Components/lis3dsh/lis3dsh.h +++ /dev/null @@ -1,1236 +0,0 @@ -/** - ****************************************************************************** - * @file lis3dsh.h - * @author MCD Application Team - * @version V2.0.0 - * @date 03-August-2015 - * @brief This file contains all the functions prototypes for the lis3dsh.c - * firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LIS3DSH_H -#define __LIS3DSH_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/accelero.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LIS302DL - * @{ - */ - -/** @defgroup LIS3DSH_Exported_Types - * @{ - */ -/* LIS3DSH struct */ -typedef struct -{ - uint8_t Output_DataRate; /* Output Data Rate into CTRL_REG4 register */ - uint8_t Axes_Enable; /* Axes enable into CTRL_REG4 register */ - uint8_t SPI_Wire; /* SPI Wire into CTRL_REG5 register */ - uint8_t Self_Test; /* Self test into CTRL_REG5 register */ - uint8_t Full_Scale; /* Full scale into CTRL_REG5 register */ - uint8_t Filter_BW; /* Filter BW into CTRL_REG5 register */ -}LIS3DSH_InitTypeDef; - -/* LIS3DSH Interrupt struct */ -typedef struct -{ - uint8_t Interrupt_Request; /* Latch/Pulse Interrupt request into CTRL_REG3 register */ - uint8_t Interrupt_Selection_Enable; /* Interrupt1/2 selection enable into CTRL_REG3 register */ - uint8_t Interrupt_Signal; /* Interrupt signal active Low/High into CTRL_REG3 register */ - uint8_t State_Machine1_Enable; /* State Machine 1 enable/disable into CTRL_REG1 register */ - uint8_t State_Machine1_Interrupt; /* State Machine 1 routed Interrupt into CTRL_REG1 register */ - uint8_t State_Machine2_Enable; /* State Machine 2 enable/disable into CTRL_REG2 register */ - uint8_t State_Machine2_Interrupt; /* State Machine 2 routed Interrupt into CTRL_REG1 register */ -}LIS3DSH_InterruptConfigTypeDef; -/** - * @} - */ - -/** @defgroup LIS3DSH_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ - -/******************************************************************************* -* OUT_T Register: Temperature Output Register -* Read only register -* Default value: 0x21 -* 7:0 Temp7-Temp0: Temperature output Data -*******************************************************************************/ -#define LIS3DSH_OUT_T_ADDR 0x0C - -/******************************************************************************* -* INFO1 Register: Information Register 1 -* Read only register -* Default value: 0x21 -*******************************************************************************/ -#define LIS3DSH_INFO1_ADDR 0x0D - -/******************************************************************************* -* INFO2 Register: Information Register 2 -* Read only register -* Default value: 0x00 -*******************************************************************************/ -#define LIS3DSH_INFO2_ADDR 0x0E - -/******************************************************************************* -* WHO_AM_I Register: Device Identification Register -* Read only register -* Default value: 0x3F -*******************************************************************************/ -#define LIS3DSH_WHO_AM_I_ADDR 0x0F - -/******************************************************************************* -* OFF_X Register: X-axis Offset Compensation Register -* Read Write register -* Default value: 0x00 -* 7:0 OFFx_7-OFFx_0: X-axis Offset Compensation Value -*******************************************************************************/ -#define LIS3DSH_OFF_X_ADDR 0x10 - -/******************************************************************************* -* OFF_Y Register: Y-axis Offset Compensation Register -* Read Write register -* Default value: 0x00 -* 7:0 OFFy_7-OFFy_0: Y-axis Offset Compensation Value -*******************************************************************************/ -#define LIS3DSH_OFF_Y_ADDR 0x11 - -/******************************************************************************* -* OFF_Z Register: Z-axis Offset Compensation Register -* Read Write register -* Default value: 0x00 -* 7:0 OFFz_7-OFFz_0: Z-axis Offset Compensation Value -*******************************************************************************/ -#define LIS3DSH_OFF_Z_ADDR 0x12 - -/******************************************************************************* -* CS_X Register: X-axis Constant Shift Register -* Read Write register -* Default value: 0x00 -* 7:0 CS_7-CS_0: X-axis Constant Shift Value -*******************************************************************************/ -#define LIS3DSH_CS_X_ADDR 0x13 - -/******************************************************************************* -* CS_Y Register: Y-axis Constant Shift Register -* Read Write register -* Default value: 0x00 -* 7:0 CS_7-CS_0: Y-axis Constant Shift Value -*******************************************************************************/ -#define LIS3DSH_CS_Y_ADDR 0x14 - -/******************************************************************************* -* CS_Z Register: Z-axis Constant Shift Value Register -* Read Write register -* Default value: 0x00 -* 7:0 CS_7-CS_0: Z-axis Constant Shift Value -*******************************************************************************/ -#define LIS3DSH_CS_Z_ADDR 0x15 - -/******************************************************************************* -* LC_L Register: Long Counter Low Register -* Read Write register -* Default value: 0x01 -* 7:0 LC_L_7-LC_L_0: Long Counter Low Value -*******************************************************************************/ -#define LIS3DSH_LC_L_ADDR 0x16 - -/******************************************************************************* -* LC_H Register: Long Counter High Register -* Read Write register -* Default value: 0x00 -* 7:0 LC_H_7-LC_H_0: Long Counter Low Value -*******************************************************************************/ -#define LIS3DSH_LC_H_ADDR 0x17 - -/******************************************************************************* -* STAT Register: State Machine Register -* Read only register -* Default value: 0x00 -* 7 LONG: LONG flag common to both State Machines -* 0 - no interrupt -* 1 - LongCounter interrupt flag -* 6 SYNCW: Common information for OUTW host action waiting -* 0 - no action waiting from Host -* 1 - Host action is waiting after OUTW command -* 5 SYNC1: -* 0 - State Machine 1 running normally -* 1 - SM1 stopped and waiting for restart request from SM2 -* 4 SYNC2: -* 0 - State Machine 2 running normally -* 1 - SM2 stopped and waiting for restart request from SM1 -* 3 INT_SM1: Interrupt signal on SM1 is reset when OUTS1 register is read -* 0 - no interrupt on State Machine 1 -* 1 - State Machine 1 interrupt happened -* 2 INT_SM2: Interrupt signal on SM2 is reset when OUTS2 register is read -* 0 - no interrupt on State Machine 2 -* 1 - State Machine 2 interrupt happened -* 1 DOR: Data OverRun bit -* 0 - no overrun -* 1 - data overrun -* 0 DRDY: New data are ready in output registers -* 0 - data not ready -* 1 - data ready -*******************************************************************************/ -#define LIS3DSH_STAT_ADDR 0x18 - -/******************************************************************************* -* PEAK1 Register: Peak 1 Register -* Read only register -* Default value: 0x00 -* 7:0 PKx_7-PKx_0: Peak 1 Value for SM1 -*******************************************************************************/ -#define LIS3DSH_PEAK1_ADDR 0x19 - -/******************************************************************************* -* PEAK2 Register: Peak 2 Register -* Read only register -* Default value: 0x00 -* 7:0 PKx_7-PKx_0: Peak 2 value for SM2 -*******************************************************************************/ -#define LIS3DSH_PEAK2_ADDR 0x1A - -/******************************************************************************* -* VFC_1 Register: Vector Filter Coefficient 1 Register -* Read Write register -* Default value: 0x00 -* 7:0 VFC1_7-VFC1_0: Vector Filter Coefficient 1 Value -*******************************************************************************/ -#define LIS3DSH_VFC_1_ADDR 0x1B - -/******************************************************************************* -* VFC_2 Register: Vector Filter Coefficient 2 Register -* Read Write register -* Default value: 0x00 -* 7:0 VFC2_7-VFC2_0: Vector Filter Coefficient 2 Value -*******************************************************************************/ -#define LIS3DSH_VFC_2_ADDR 0x1C - -/******************************************************************************* -* VFC_3 Register: Vector Filter Coefficient 3 Register -* Read Write register -* Default value: 0x00 -* 7:0 VFC3_7-VFC3_0: Vector Filter Coefficient 3 Value -*******************************************************************************/ -#define LIS3DSH_VFC_3_ADDR 0x1D - -/******************************************************************************* -* VFC_4 Register: Vector Filter Coefficient 4 Register -* Read Write register -* Default value: 0x00 -* 7:0 VFC4_7-VFC4_0: Vector Filter Coefficient 4 Value -*******************************************************************************/ -#define LIS3DSH_VFC_4_ADDR 0x1E - -/******************************************************************************* -* THRS3 Register: Threshold Value 3 Register -* Read Write register -* Default value: 0x00 -* 7:0 THRS3_7-THRS3_0: Common Threshold for Overrun Detection Value -*******************************************************************************/ -#define LIS3DSH_THRS3_ADDR 0x1F - -/******************************************************************************* -* CTRL_REG4 Register: Control Register 4 -* Read Write register -* Default value: 0x07 -* 7:4 ODR3-ODR0: Data rate selection -* ODR3 | ODR2 | ODR1 | ORD0 | ORD Selection -* ------------------------------------------- -* 0 | 0 | 0 | 0 | Power Down (Default) -* 0 | 0 | 0 | 1 | 3.125 Hz -* 0 | 0 | 1 | 0 | 6.25 Hz -* 0 | 0 | 1 | 1 | 12.5 Hz -* 0 | 1 | 0 | 0 | 25 Hz -* 0 | 1 | 0 | 1 | 50 Hz -* 0 | 1 | 1 | 0 | 100 Hz -* 0 | 1 | 1 | 1 | 400 Hz -* 1 | 0 | 0 | 0 | 800 Hz -* 1 | 0 | 0 | 1 | 1600 Hz -* -* 3 BDU: Block data update -* 0: Output register not updated until High and Low reading (Default) -* 1: Continuous update -* 2 ZEN: -* 0: Z-axis disable (Default) -* 1: Z-axis enable -* 1 YEN: -* 0: Y-axis disable (Default) -* 1: Y-axis enable -* 0 XEN: -* 0: Y-axis disable (Default) -* 1: Y-axis enable -*******************************************************************************/ -#define LIS3DSH_CTRL_REG4_ADDR 0x20 - -/******************************************************************************* -* CTRL_REG1 Register: Control Register 1 (SM1 interrupt configuration register) -* Read Write register -* Default value: 0x00 -* 7:5 HYST1_2-HYST1_0: Hysteresis which is added or subtracted from the -* threshold values (THRS1_1 and THRS2_1) of SM1. -* 000 = 0 (Default) -* 111 = 7 (maximum Hysteresis) -* 4 Reserved -* 3 SM1_INT: -* 0: State Machine 1 interrupt routed to INT1 (Default) -* 1: State Machine 1 interrupt routed to INT2 -* 2 Reserved -* 1 Reserved -* 0 SM1_EN: -* 0: State Machine 1 disabled. Temporary memories and registers -* related to this State Machine are left intact. (Default) -* 1: State Machine 1 enabled. -*******************************************************************************/ -#define LIS3DSH_CTRL_REG1_ADDR 0x21 - -/******************************************************************************* -* CTRL_REG2 Register: Control Register 2 (SM2 interrupt configuration register) -* Read Write register -* Default value: 0x00 -* 7:5 HYST2_2-HYST2_0: Hysteresis which is added or subtracted from the -* threshold values (THRS1_2 and THRS2_2) of SM1. -* 000 = 0 (Default) -* 111 = 7 (maximum Hysteresis) -* 4 Reserved -* 3 SM2_INT: -* 0: State Machine 2 interrupt routed to INT1 (Default) -* 1: State Machine 2 interrupt routed to INT2 -* 2 Reserved -* 1 Reserved -* 0 SM2_EN: -* 0: State Machine 2 disabled. Temporary memories and registers -* related to this State Machine are left intact. (Default) -* 1: State Machine 2 enabled. -*******************************************************************************/ -#define LIS3DSH_CTRL_REG2_ADDR 0x22 - -/******************************************************************************* -* CTRL_REG3 Register: Control Register 3 -* Read Write register -* Default value: 0x00 -* 7 DR_EN: Data-ready interrupt -* 0 - Data-ready interrupt disabled (Default) -* 1 - Data-ready interrupt enabled and routed to INT1 -* 6 IEA: -* 0 - Interrupt signal active LOW (Default) -* 1 - Interrupt signal active HIGH -* 5 IEL: -* 0 - Interrupt latched (Default) -* 1 - Interrupt pulsed -* 4 INT2_EN: -* 0 - INT2 signal disabled (High-Z state) (Default) -* 1 - INT2 signal enabled (signal pin fully functional) -* 3 INT1_EN: -* 0 - INT1 (DRDY) signal disabled (High-Z state) (Default) -* 1 - INT1 (DRDY) signal enabled (signal pin fully functional) DR_EN bit in CTRL_REG3 register should be taken into account too -* 2 VLIFT: -* 0 - Vector filter disabled (Default) -* 1 - Vector filter enabled -* 1 Reserved -* 0 STRT: Soft Reset -* 0 - (Default) -* 1 - it resets the whole internal logic circuitry. It automatically returns to 0. -*******************************************************************************/ -#define LIS3DSH_CTRL_REG3_ADDR 0x23 - -/******************************************************************************* -* CTRL_REG5 Register: Control Register 5 -* Read Write register -* Default value: 0x00 -* 7:6 BW2-BW1: Anti aliasing filter bandwidth -* BW2 | BW1 | BW Selection -* ------------------------- -* 0 | 0 | 800 Hz (Default) -* 0 | 1 | 40 Hz -* 1 | 0 | 200 Hz -* 1 | 1 | 50 Hz -* -* 5:3 FSCALE2-FSCALE0: Full scale selection -* FSCALE2 | FSCALE1 | FSCALE0 | Full scale selection -* -------------------------------------------------- -* 0 | 0 | 0 | +/-2g (Default) -* 0 | 0 | 1 | +/-4g -* 0 | 1 | 0 | +/-6g -* 0 | 1 | 1 | +/-8g -* 1 | 0 | 0 | +/-16g -* -* 2:1 ST2_ST1: Self-test Enable -* ST2 | ST1 | ST Selection -* ------------------------- -* 0 | 0 | Normal Mode (Default) -* 0 | 1 | Positive sign self-test -* 1 | 0 | Negative sign-test -* 1 | 1 | Not Allowed -* -* 0 SIM: SPI serial internal interface mode selection -* 0: 4-wire interface (Default) -* 1: 3-wire interface -*******************************************************************************/ -#define LIS3DSH_CTRL_REG5_ADDR 0x24 - -/******************************************************************************* -* CTRL_REG6 Register: Control Register 6 -* Read Write register -* Default value: 0x00 -* 7 BOOT: Force reboot, cleared as soon as the reboot is finished. Active High. -* 6 FIFO_EN: FIFO Enable -* 0: disable (Default) -* 1: enable -* 5 STP_WTM: Stop on Watermark - FIFO depth can be limited at the Watermark value, by setting to “1” the STP_WTM bit. -* 0: disable (Default) -* 1: enable -* 4 IF_ADD_INC: Register address automatically increased during a multiple byte access with a serial interface (I2C or SPI) -* 0: disable (Default) -* 1: enable -* 3 I1_EMPTY: Enable FIFO Empty indication on INT1 pin. -* 0: disable (Default) -* 1: enable -* 2 I1_WTM: FIFO Watermark interrupt on INT1 pin. -* 0: disable (Default) -* 1: enable -* 1 I1_OVERRUN: FIFO Overrun interrupt on INT1 pin. -* 0: disable (Default) -* 1: enable -* 0 I2_BOOT: BOOT interrupt on INT2 pin. -* 0: disable (Default) -* 1: enable -*******************************************************************************/ -#define LIS3DSH_CTRL_REG6_ADDR 0x25 - -/******************************************************************************* -* STATUS Register: Status Data Register -* Read only register -* Default value: 0x00 -* 7 ZYXOR: X, Y and Z-axis Data Overrun. -* 0: no Overrun has occurred (Default) -* 1: a new set of data has overwritten the previous ones -* 6 ZOR: Z-axis Data Overrun. -* 0: no Overrun has occurred (Default) -* 1: a new data for the Z-axis has overwritten the previous ones -* 5 YOR: Y-axis Data Overrun. -* 0: no Overrun has occurred (Default) -* 1: a new data for the Y-axis has overwritten the previous ones -* 4 XOR: X-axis Data Overrun. -* 0: no Overrun has occurred (Default) -* 1: a new data for the X-axis has overwritten the previous ones -* 3 ZYXDA: X, Y and Z-axis new Data Available. -* 0: a new set of data is not yet available (Default) -* 1: a new set of data is available -* 2 ZDA: Z-axis new data available. -* 0: a new data for the Z-axis is not yet available (Default) -* 1: a new data for Z-axis is available -* 1 YDA: Y-axis new data available. -* 0: a new data for the Y-axis is not yet available (Default) -* 1: a new data for Y-axis is available -* 0 XDA: X-axis new data available. -* 0: a new data for the X-axis is not yet available (Default) -* 1: a new data for X-axis is available -*******************************************************************************/ -#define LIS3DSH_STATUS_ADDR 0x27 - -/******************************************************************************* -* OUT_X_L Register: X-axis Output Acceleration Low Data -* Read only register -* Default value: output -* 7:0 XD7-XD0: X-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_X_L_ADDR 0x28 - -/******************************************************************************* -* OUT_X_H Register: X-axis Output Acceleration High Data -* Read only register -* Default value: output -* 15:8 XD15-XD8: X-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_X_H_ADDR 0x29 - -/******************************************************************************* -* OUT_Y_L Register: Y-axis Output Acceleration Low Data -* Read only register -* Default value: output -* 7:0 YD7-YD0: Y-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_Y_L_ADDR 0x2A - -/******************************************************************************* -* OUT_Y_H Register: Y-axis Output Acceleration High Data -* Read only register -* Default value: output -* 15:8 YD15-YD8: Y-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_Y_H_ADDR 0x2B - -/******************************************************************************* -* OUT_Z_L Register: Z-axis Output Acceleration Low Data -* Read only register -* Default value: output -* 7:0 ZD7-ZD0: Z-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_Z_L_ADDR 0x2C - -/******************************************************************************* -* OUT_Z_H Register: Z-axis Output Acceleration High Data -* Read only register -* Default value: output -* 15:8 ZD15-ZD8: Z-axis output Data -*******************************************************************************/ -#define LIS3DSH_OUT_Z_H_ADDR 0x2D - -/******************************************************************************* -* FIFO_CTRL Register: FIFO Control Register -* Read/Write register -* Default value: 0x00 -* 7:5 FMODE2-FMODE0: FIFO mode -* FMODE2 | FMODE1 | FMODE0 | Mode description -* -------------------------------------------------- -* 0 | 0 | 0 | Bypass mode. FIFO turned off. (Default) -* 0 | 0 | 1 | FIFO mode. Stop collecting data when FIFO is full. -* 0 | 1 | 0 | Stream mode. If the FIFO is full, the new sample overwrites the older one (circular buffer). -* 0 | 1 | 1 | Stream mode until trigger is de-asserted, then FIFO mode. -* 1 | 0 | 0 | Bypass mode until trigger is de-asserted, then Stream mode. -* 1 | 0 | 1 | Not to use. -* 1 | 1 | 0 | Not to use. -* 1 | 1 | 1 | Bypass mode until trigger is de-asserted, then FIFO mode. -* -* 4:0 WTMP4-WTMP0: FIFO Watermark pointer. It is the FIFO depth when the Watermark is enabled -*******************************************************************************/ -#define LIS3DSH_FIFO_CTRL_ADDR 0x2E - -/******************************************************************************* -* FIFO_SRC Register: FIFO Source Register -* Read only register -* Default value: 0x00 -* 7 WTM: Watermark status. -* 0: FIFO filling is lower than WTM level (Default) -* 1: FIFO filling is equal or higher than WTM level -* 6 OVRN_FIFO: Overrun bit status. -* 0: FIFO is not completely filled (Default) -* 1: FIFO is completely filled -* 5 EMPTY: Overrun bit status. -* 0: FIFO not empty (Default) -* 1: FIFO empty -* 4:0 FSS: Number of samples stored in the FIFO - 1 -*******************************************************************************/ -#define LIS3DSH_FIFO_SRC_ADDR 0x2F - -/******************************************************************************* -* ST1_X Register: State Machine 1 Code Registers -* Write only register -* Default value: 0x00 -* 7:0 ST1_7-ST1_0: State Machine 1 Code Registers -*******************************************************************************/ -#define LIS3DSH_ST1_1_ADDR 0x40 -#define LIS3DSH_ST1_2_ADDR 0x41 -#define LIS3DSH_ST1_3_ADDR 0x42 -#define LIS3DSH_ST1_4_ADDR 0x43 -#define LIS3DSH_ST1_5_ADDR 0x44 -#define LIS3DSH_ST1_6_ADDR 0x45 -#define LIS3DSH_ST1_7_ADDR 0x46 -#define LIS3DSH_ST1_8_ADDR 0x47 -#define LIS3DSH_ST1_9_ADDR 0x48 -#define LIS3DSH_ST1_10_ADDR 0x49 -#define LIS3DSH_ST1_11_ADDR 0x4A -#define LIS3DSH_ST1_12_ADDR 0x4B -#define LIS3DSH_ST1_13_ADDR 0x4C -#define LIS3DSH_ST1_14_ADDR 0x4D -#define LIS3DSH_ST1_15_ADDR 0x4E -#define LIS3DSH_ST1_16_ADDR 0x4F - -/******************************************************************************* -* TIM4_1 Register: SM1 General Timer 4 Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM1 Timer 4 Counter 1 Value -*******************************************************************************/ -#define LIS3DSH_TIM4_1_ADDR 0x50 - -/******************************************************************************* -* TIM3_1 Register: SM1 General Timer 3 Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM1 Timer 3 Counter 1 Value -*******************************************************************************/ -#define LIS3DSH_TIM3_1_ADDR 0x51 - -/******************************************************************************* -* TIM2_1_L Register: SM1 General Timer 2 Low Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM1 Timer 2 Counter 1 Low Value -*******************************************************************************/ -#define LIS3DSH_TIM2_1_L_ADDR 0x52 - -/******************************************************************************* -* TIM2_1_H Register: SM1 General Timer 2 High Register -* Write only register -* Default value: 0x00 -* 15:8 TM_15-TM_8: SM1 Timer 2 Counter 1 High Value -*******************************************************************************/ -#define LIS3DSH_TIM2_1_H_ADDR 0x53 - -/******************************************************************************* -* TIM1_1_L Register: SM1 General Timer 1 Low Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM1 Timer 1 Counter 1 Low Value -*******************************************************************************/ -#define LIS3DSH_TIM1_1_L_ADDR 0x54 - -/******************************************************************************* -* TIM1_1_H Register: SM1 General Timer 1 High Register -* Write only register -* Default value: 0x00 -* 15:8 TM_15-TM_8: SM1 Timer 1 Counter 1 High Value -*******************************************************************************/ -#define LIS3DSH_TIM1_1_H_ADDR 0x55 - -/******************************************************************************* -* THRS2_1 Register: SM1 Threshold Value 1 Register -* Write only register -* Default value: 0x00 -* 7:0 THS7-THS0: SM1 Threshold Value 1 -*******************************************************************************/ -#define LIS3DSH_THRS2_1_ADDR 0x56 - -/******************************************************************************* -* THRS1_1 Register: SM1 Threshold Value 2 Register -* Write only register -* Default value: 0x00 -* 7:0 THS7-THS0: SM1 Threshold Value 2 -*******************************************************************************/ -#define LIS3DSH_THRS1_1_ADDR 0x57 - -/******************************************************************************* -* MASK1_B Register: SM1 Swap Axis and Sign Mask Register -* Write only register -* Default value: 0x00 -* 7 P_X: X-Axis Positive Motion Detection -* 0: X+ disabled -* 1: X+ enabled -* 6 N_X: X-Axis Negative Motion Detection -* 0: X- disabled -* 1: X- enabled -* 5 P_Y: Y-Axis Positive Motion Detection -* 0: Y+ disabled -* 1: Y+ enabled -* 4 N_Y: Y-Axis Negative Motion Detection -* 0: Y- disabled -* 1: Y- enabled -* 3 P_Z: X-Axis Positive Motion Detection -* 0: Z+ disabled -* 1: Z+ enabled -* 2 N_Z: X-Axis Negative Motion Detection -* 0: Z- disabled -* 1: Z- enabled -* 1 P_V: -* 0: V+ disabled -* 1: V+ enabled -* 0 N_V: -* 0: V- disabled -* 1: V- enabled -*******************************************************************************/ -#define LIS3DSH_MASK1_B_ADDR 0x59 - -/******************************************************************************* -* MASK1_A Register: SM1 Default Axis and Sign Mask Register -* Write only register -* Default value: 0x00 -* 7 P_X: X-Axis Positive Motion Detection -* 0: X+ disabled -* 1: X+ enabled -* 6 N_X: X-Axis Negative Motion Detection -* 0: X- disabled -* 1: X- enabled -* 5 P_Y: Y-Axis Positive Motion Detection -* 0: Y+ disabled -* 1: Y+ enabled -* 4 N_Y: Y-Axis Negative Motion Detection -* 0: Y- disabled -* 1: Y- enabled -* 3 P_Z: X-Axis Positive Motion Detection -* 0: Z+ disabled -* 1: Z+ enabled -* 2 N_Z: X-Axis Negative Motion Detection -* 0: Z- disabled -* 1: Z- enabled -* 1 P_V: -* 0: V+ disabled -* 1: V+ enabled -* 0 N_V: -* 0: V- disabled -* 1: V- enabled -*******************************************************************************/ -#define LIS3DSH_MASK1_A_ADDR 0x5A - -/******************************************************************************* -* SETT1 Register: SM1 Detection Settings Register -* Write only register -* Default value: 0x00 -* 7 P_DET: SM1 peak detection bit -* 0: peak detection disabled (Default) -* 1: peak detection enabled -* 6 THR3_SA: -* 0: no action (Default) -* 1: threshold 3 enabled for axis and sign mask reset (MASK1_B) -* 5 ABS: -* 0: unsigned thresholds THRSx (Default) -* 1: signed thresholds THRSx -* 4 Reserved -* 3 Reserved -* 2 THR3_MA: -* 0: no action (Default) -* 1: threshold 3 enabled for axis and sign mask reset (MASK1_A) -* 1 R_TAM: Next condition validation flag -* 0: mask frozen on the axis that triggers the condition (Default) -* 1: standard mask always evaluated -* 0 SITR: -* 0: no actions (Default) -* 1: STOP and CONT commands generate an interrupt and perform output -* actions as OUTC command. -*******************************************************************************/ -#define LIS3DSH_SETT1_ADDR 0x5B - -/******************************************************************************* -* PR1 Register: SM1 Program and Reset Pointers Register -* Read only register -* Default value: 0x00 -* 7:4 PP3-PP0: SM1 program pointer address -* 3:0 RP3-RP0: SM1 reset pointer address -*******************************************************************************/ -#define LIS3DSH_PR1_ADDR 0x5C - -/******************************************************************************* -* TC1_L Register: SM1 General Timer Counter Low Register -* Read only register -* Default value: 0x00 -* 7:0 TC1_7-TC1_0: SM1 General Timer Counter Low Value -*******************************************************************************/ -#define LIS3DSH_TC1_L_ADDR 0x5D - -/******************************************************************************* -* TC1_H Register: SM1 General Timer Counter High Register -* Read only register -* Default value: 0x00 -* 15:8 TC1_15-TC1_8: SM1 General Timer Counter High Value -*******************************************************************************/ -#define LIS3DSH_TC1_H_ADDR 0x5E - -/******************************************************************************* -* OUTS1 Register: SM1 Output Set Flag Register -* Read only register -* Default value: 0x00 -* 7 P_X: -* 0: X+ noshow -* 1: X+ show -* 6 N_X: -* 0: X- noshow -* 1: X- show -* 5 P_Y: -* 0: Y+ noshow -* 1: Y+ show -* 4 N_Y: -* 0: Y- noshow -* 1: Y- show -* 3 P_Z: -* 0: Z+ noshow -* 1: Z+ show -* 2 N_Z: -* 0: Z- noshow -* 1: Z- show -* 1 P_V: -* 0: V+ noshow -* 1: V+ show -* 0 N_V: -* 0: V- noshow -* 1: V- show -*******************************************************************************/ -#define LIS3DSH_OUTS1_ADDR 0x5F - -/******************************************************************************* -* ST2_X Register: State Machine 2 Code Registers -* Write only register -* Default value: 0x00 -* 7:0 ST2_7-ST2_0: State Machine 2 Code Registers -*******************************************************************************/ -#define LIS3DSH_ST2_1_ADDR 0x60 -#define LIS3DSH_ST2_2_ADDR 0x61 -#define LIS3DSH_ST2_3_ADDR 0x62 -#define LIS3DSH_ST2_4_ADDR 0x63 -#define LIS3DSH_ST2_5_ADDR 0x64 -#define LIS3DSH_ST2_6_ADDR 0x65 -#define LIS3DSH_ST2_7_ADDR 0x66 -#define LIS3DSH_ST2_8_ADDR 0x67 -#define LIS3DSH_ST2_9_ADDR 0x68 -#define LIS3DSH_ST2_10_ADDR 0x69 -#define LIS3DSH_ST2_11_ADDR 0x6A -#define LIS3DSH_ST2_12_ADDR 0x6B -#define LIS3DSH_ST2_13_ADDR 0x6C -#define LIS3DSH_ST2_14_ADDR 0x6D -#define LIS3DSH_ST2_15_ADDR 0x6E -#define LIS3DSH_ST2_16_ADDR 0x6F - -/******************************************************************************* -* TIM4_2 Register: SM2 General Timer 4 Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM2 Timer 4 Counter 1 Value -*******************************************************************************/ -#define LIS3DSH_TIM4_2_ADDR 0x70 - -/******************************************************************************* -* TIM3_2 Register: SM2 General Timer 3 Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM2 Timer 3 Counter 2 Value -*******************************************************************************/ -#define LIS3DSH_TIM3_2_ADDR 0x71 - -/******************************************************************************* -* TIM2_2_L Register: SM2 General Timer 2 Low Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM2 Timer 2 Counter 2 Low Value -*******************************************************************************/ -#define LIS3DSH_TIM2_2_L_ADDR 0x72 - -/******************************************************************************* -* TIM2_2_H Register: SM2 General Timer 2 High Register -* Write only register -* Default value: 0x00 -* 15:8 TM_15-TM_8: SM2 Timer 2 Counter 2 High Value -*******************************************************************************/ -#define LIS3DSH_TIM2_2_H_ADDR 0x73 - -/******************************************************************************* -* TIM1_2_L Register: SM2 General Timer 1 Low Register -* Write only register -* Default value: 0x00 -* 7:0 TM_7-TM_0: SM2 Timer 1 Counter 2 Low Value -*******************************************************************************/ -#define LIS3DSH_TIM1_2_L_ADDR 0x74 - -/******************************************************************************* -* TIM1_2_H Register: SM2 General Timer 1 High Register -* Write only register -* Default value: 0x00 -* 15:8 TM_15-TM_8: SM2 Timer 1 Counter 2 High Value -*******************************************************************************/ -#define LIS3DSH_TIM1_2_H_ADDR 0x75 - -/******************************************************************************* -* THRS2_2 Register: SM2 Threshold Value 1 Register -* Write only register -* Default value: 0x00 -* 7:0 THS7-THS0: SM2 Threshold Value -*******************************************************************************/ -#define LIS3DSH_THRS2_2_ADDR 0x76 - -/******************************************************************************* -* THRS1_2 Register: SM2 Threshold Value 2 Register -* Write only register -* Default value: 0x00 -* 7:0 THS7-THS0: SM2 Threshold Value -*******************************************************************************/ -#define LIS3DSH_THRS1_2_ADDR 0x77 - -/******************************************************************************* -* DES2 Register: SM2 Decimation Counter Value Register -* Write only register -* Default value: 0x00 -* 7:0 D7-D0: SM2 Decimation Counter Value -*******************************************************************************/ -#define LIS3DSH_DES2_ADDR 0x78 - -/******************************************************************************* -* MASK2_B Register: SM2 Axis and Sign Mask Register -* Write only register -* Default value: 0x00 -* 7 P_X: X-Axis Positive Motion Detection -* 0: X+ disabled -* 1: X+ enabled -* 6 N_X: X-Axis Negative Motion Detection -* 0: X- disabled -* 1: X- enabled -* 5 P_Y: Y-Axis Positive Motion Detection -* 0: Y+ disabled -* 1: Y+ enabled -* 4 N_Y: Y-Axis Negative Motion Detection -* 0: Y- disabled -* 1: Y- enabled -* 3 P_Z: X-Axis Positive Motion Detection -* 0: Z+ disabled -* 1: Z+ enabled -* 2 N_Z: X-Axis Negative Motion Detection -* 0: Z- disabled -* 1: Z- enabled -* 1 P_V: -* 0: V+ disabled -* 1: V+ enabled -* 0 N_V: -* 0: V- disabled -* 1: V- enabled -*******************************************************************************/ -#define LIS3DSH_MASK2_B_ADDR 0x79 - -/******************************************************************************* -* MASK2_A Register: SM2 Axis and Sign Mask Register -* Write only register -* Default value: 0x00 -* 7 P_X: X-Axis Positive Motion Detection -* 0: X+ disabled -* 1: X+ enabled -* 6 N_X: X-Axis Negative Motion Detection -* 0: X- disabled -* 1: X- enabled -* 5 P_Y: Y-Axis Positive Motion Detection -* 0: Y+ disabled -* 1: Y+ enabled -* 4 N_Y: Y-Axis Negative Motion Detection -* 0: Y- disabled -* 1: Y- enabled -* 3 P_Z: X-Axis Positive Motion Detection -* 0: Z+ disabled -* 1: Z+ enabled -* 2 N_Z: X-Axis Negative Motion Detection -* 0: Z- disabled -* 1: Z- enabled -* 1 P_V: -* 0: V+ disabled -* 1: V+ enabled -* 0 N_V: -* 0: V- disabled -* 1: V- enabled -*******************************************************************************/ -#define LIS3DSH_MASK2_A_ADDR 0x7A - -/******************************************************************************* -* SETT2 Register: SM2 Detection Settings Register -* Write only register -* Default value: 0x00 -* 7 P_DET: SM2 peak detection -* 0: peak detection disabled (Default) -* 1: peak detection enabled -* 6 THR3_SA: -* 0: no action (Default) -* 1: threshold 3 limit value for axis and sign mask reset (MASK2_B) -* 5 ABS: -* 0: unsigned thresholds (Default) -* 1: signed thresholds -* 4 RADI: -* 0: raw data -* 1: diff data for State Machine 2 -* 3 D_CS: -* 0: DIFF2 enabled (difference between current data and previous data) -* 1: constant shift enabled (difference between current data and constant values) -* 2 THR3_MA: -* 0: no action (Default) -* 1: threshold 3 enabled for axis and sign mask reset (MASK2_A) -* 1 R_TAM: Next condition validation flag -* 0: mask frozen on the axis that triggers the condition (Default) -* 1: standard mask always evaluated -* 0 SITR: -* 0: no actions (Default) -* 1: STOP and CONT commands generate an interrupt and perform output -* actions as OUTC command. -*******************************************************************************/ -#define LIS3DSH_SETT2_ADDR 0x7B - -/******************************************************************************* -* PR2 Register: SM2 Program and Reset Pointers Register -* Read only register -* Default value: 0x00 -* 7:4 PP3-PP0: SM1 program pointer address -* 3:0 RP3-RP0: SM1 reset pointer address -*******************************************************************************/ -#define LIS3DSH_PR2_ADDR 0x7C - -/******************************************************************************* -* TC2_L Register: SM2 General Timer Counter Low Register -* Read only register -* Default value: 0x00 -* 7:0 TC2_7-TC2_0: SM2 General Timer Counter Low Value -*******************************************************************************/ -#define LIS3DSH_TC2_L_ADDR 0x7D - -/******************************************************************************* -* TC2_H Register: SM2 General Timer Counter High Register -* Read only register -* Default value: 0x00 -* 15:8 TC2_15-TC2_8: SM2 General Timer Counter High Value -*******************************************************************************/ -#define LIS3DSH_TC2_H_ADDR 0x7E - -/******************************************************************************* -* OUTS2 Register: SM2 Output Set Flag Register -* Read only register -* Default value: 0x00 -* 7 P_X: -* 0: X+ noshow -* 1: X+ show -* 6 N_X: -* 0: X- noshow -* 1: X- show -* 5 P_Y: -* 0: Y+ noshow -* 1: Y+ show -* 4 N_Y: -* 0: Y- noshow -* 1: Y- show -* 3 P_Z: -* 0: Z+ noshow -* 1: Z+ show -* 2 N_Z: -* 0: Z- noshow -* 1: Z- show -* 1 P_V: -* 0: V+ noshow -* 1: V+ show -* 0 N_V: -* 0: V- noshow -* 1: V- show -*******************************************************************************/ -#define LIS3DSH_OUTS2_ADDR 0x7F - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ -#define I_AM_LIS3DSH 0x3F - -/** @defgroup Sensitivity_selection - * @{ - */ -#define LIS3DSH_SENSITIVITY_0_06G 0.06 /* 0.06 mg/digit*/ -#define LIS3DSH_SENSITIVITY_0_12G 0.12 /* 0.12 mg/digit*/ -#define LIS3DSH_SENSITIVITY_0_18G 0.18 /* 0.18 mg/digit*/ -#define LIS3DSH_SENSITIVITY_0_24G 0.24 /* 0.24 mg/digit*/ -#define LIS3DSH_SENSITIVITY_0_73G 0.73 /* 0.73 mg/digit*/ -/** - * @} - */ - -/** @defgroup Data_Rate_Power_Mode_selection - * @{ - */ -#define LIS3DSH_DATARATE_POWERDOWN ((uint8_t)0x00) /* Power Down Mode*/ -#define LIS3DSH_DATARATE_3_125 ((uint8_t)0x10) /* 3.125 Hz Normal Mode */ -#define LIS3DSH_DATARATE_6_25 ((uint8_t)0x20) /* 6.25 Hz Normal Mode */ -#define LIS3DSH_DATARATE_12_5 ((uint8_t)0x30) /* 12.5 Hz Normal Mode */ -#define LIS3DSH_DATARATE_25 ((uint8_t)0x40) /* 25 Hz Normal Mode */ -#define LIS3DSH_DATARATE_50 ((uint8_t)0x50) /* 50 Hz Normal Mode */ -#define LIS3DSH_DATARATE_100 ((uint8_t)0x60) /* 100 Hz Normal Mode */ -#define LIS3DSH_DATARATE_400 ((uint8_t)0x70) /* 400 Hz Normal Mode */ -#define LIS3DSH_DATARATE_800 ((uint8_t)0x80) /* 800 Hz Normal Mode */ -#define LIS3DSH_DATARATE_1600 ((uint8_t)0x90) /* 1600 Hz Normal Mode */ -/** - * @} - */ - -/** @defgroup Full_Scale_selection - * @{ - */ -#define LIS3DSH_FULLSCALE_2 ((uint8_t)0x00) /* 2 g */ -#define LIS3DSH_FULLSCALE_4 ((uint8_t)0x08) /* 4 g */ -#define LIS3DSH_FULLSCALE_6 ((uint8_t)0x10) /* 6 g */ -#define LIS3DSH_FULLSCALE_8 ((uint8_t)0x18) /* 8 g */ -#define LIS3DSH_FULLSCALE_16 ((uint8_t)0x20) /* 16 g */ -#define LIS3DSH__FULLSCALE_SELECTION ((uint8_t)0x38) -/** - * @} - */ - -/** @defgroup Anti-Aliasing_Filter_Bandwidth - * @{ - */ -#define LIS3DSH_FILTER_BW_800 ((uint8_t)0x00) /* 800 Hz */ -#define LIS3DSH_FILTER_BW_40 ((uint8_t)0x08) /* 40 Hz */ -#define LIS3DSH_FILTER_BW_200 ((uint8_t)0x10) /* 200 Hz */ -#define LIS3DSH_FILTER_BW_50 ((uint8_t)0x18) /* 50 Hz */ -/** - * @} - */ - -/** @defgroup Self_Test_selection - * @{ - */ -#define LIS3DSH_SELFTEST_NORMAL ((uint8_t)0x00) -#define LIS3DSH_SELFTEST_P ((uint8_t)0x02) -#define LIS3DSH_SELFTEST_M ((uint8_t)0x04) -/** - * @} - */ - -/** @defgroup Direction_XYZ_selection - * @{ - */ -#define LIS3DSH_X_ENABLE ((uint8_t)0x01) -#define LIS3DSH_Y_ENABLE ((uint8_t)0x02) -#define LIS3DSH_Z_ENABLE ((uint8_t)0x04) -#define LIS3DSH_XYZ_ENABLE ((uint8_t)0x07) -/** - * @} - */ - -/** @defgroup SPI_Serial_Interface_Mode_selection - * @{ - */ -#define LIS3DSH_SERIALINTERFACE_4WIRE ((uint8_t)0x00) -#define LIS3DSH_SERIALINTERFACE_3WIRE ((uint8_t)0x01) -/** - * @} - */ - -/** @defgroup Interrupt_Request_selection Interrupt_Selection_Enable - * @{ - */ -#define LIS3DSH_INTERRUPT_REQUEST_LATCHED ((uint8_t)0x00) -#define LIS3DSH_INTERRUPT_REQUEST_PULSED ((uint8_t)0x20) -/** - * @} - */ - -/** @defgroup Interrupt_Selection_Enable - * @{ - */ -#define LIS3DSH_INTERRUPT_1_ENABLE ((uint8_t)0x88) -#define LIS3DSH_INTERRUPT_2_ENABLE ((uint8_t)0x00) -#define LIS3DSH_INTERRUPT_1_2_ENABLE ((uint8_t)0x88) -/** - * @} - */ - -/** @defgroup Interrupt_Signal_Active_Selection - * @{ - */ -#define LIS3DSH_INTERRUPT_SIGNAL_LOW ((uint8_t)0x00) -#define LIS3DSH_INTERRUPT_SIGNAL_HIGH ((uint8_t)0x40) -/** - * @} - */ - -/** @defgroup State_Machine_Enable - * @{ - */ -#define LIS3DSH_SM_ENABLE ((uint8_t)0x01) -#define LIS3DSH_SM_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup State_Machine_Routed_Interrupt - * @{ - */ -#define LIS3DSH_SM_INT1 ((uint8_t)0x00) -#define LIS3DSH_SM_INT2 ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Boot_Mode_selection - * @{ - */ -#define LIS3DSH_BOOT_NORMALMODE ((uint8_t)0x00) -#define LIS3DSH_BOOT_FORCED ((uint8_t)0x80) -/** - * @} - */ - - -/** @defgroup FIFO_Mode_selection - * @{ - */ -#define LIS3DSH_FIFO_BYPASS_MODE ((uint8_t)0x00) -#define LIS3DSH_FIFO_MODE ((uint8_t)0x20) -#define LIS3DSH_FIFO_STREAM_MODE ((uint8_t)0x40) -#define LIS3DSH_FIFO_SF_TRIGGER_MODE ((uint8_t)0x60) -#define LIS3DSH_FIFO_BS_TRIGGER_MODE ((uint8_t)0x80) -#define LIS3DSH_FIFO_BF_TRIGGER_MODE ((uint8_t)0xE0) -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LIS3DSH_Exported_Functions - * @{ - */ -void LIS3DSH_Init(uint16_t InitStruct); -void LIS3DSH_DeInit(void); -uint8_t LIS3DSH_ReadID(void); -void LIS3DSH_InterruptConfig(LIS3DSH_InterruptConfigTypeDef *LIS3DSH_IntConfigStruct); -void LIS3DSH_Click_IntConfig(void); -void LIS3DSH_ODR_LowpowerCmd(uint8_t ODR_LowPowerMode); -void LIS3DSH_DataRateCmd(uint8_t DataRateValue); -void LIS3DSH_FullScaleCmd(uint8_t FS_value); -void LIS3DSH_RebootCmd(void); -void LIS3DSH_ReadACC(int16_t *pData); - -/* Accelerometer driver structure */ -extern ACCELERO_DrvTypeDef Lis3dshDrv; - -/* Accelerometer IO functions */ -void ACCELERO_IO_Init(void); -void ACCELERO_IO_ITConfig(void); -void ACCELERO_IO_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite); -void ACCELERO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead); - -#ifdef __cplusplus -} -#endif - -#endif /* __LIS3DSH_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ls016b8uy b/Drivers/BSP/Components/ls016b8uy new file mode 160000 index 0000000000..476dfb1fef --- /dev/null +++ b/Drivers/BSP/Components/ls016b8uy @@ -0,0 +1 @@ +Subproject commit 476dfb1fef9418415d557490ec0b73777df2a4fa diff --git a/Drivers/BSP/Components/ls016b8uy/LICENSE.md b/Drivers/BSP/Components/ls016b8uy/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ls016b8uy/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ls016b8uy/Release_Notes.html b/Drivers/BSP/Components/ls016b8uy/Release_Notes.html deleted file mode 100644 index 4dcee90fb2..0000000000 --- a/Drivers/BSP/Components/ls016b8uy/Release_Notes.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - Release Notes for LS016B8UY Component Drivers - - - - - - -
-
-
-

Release Notes for

-

LS016B8UY Component Drivers

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the LS016B8UY Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ls016b8uy/_htmresc/favicon.png b/Drivers/BSP/Components/ls016b8uy/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ls016b8uy/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ls016b8uy/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ls016b8uy/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ls016b8uy/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ls016b8uy/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ls016b8uy/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ls016b8uy/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ls016b8uy/ls016b8uy.c b/Drivers/BSP/Components/ls016b8uy/ls016b8uy.c deleted file mode 100644 index 801f3e02f0..0000000000 --- a/Drivers/BSP/Components/ls016b8uy/ls016b8uy.c +++ /dev/null @@ -1,640 +0,0 @@ -/** - ****************************************************************************** - * @file ls016b8uy.c - * @author MCD Application Team - * @brief This file includes the LCD driver for LS016B8UY LCD. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ls016b8uy.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ls016b8uy - * @brief This file provides a set of functions needed to drive the - * LS016B8UY LCD. - * @{ - */ - -/** @defgroup LS016B8UY_Private_TypesDefinitions - * @{ - */ -typedef struct { - uint8_t red; - uint8_t green; - uint8_t blue; -} LS016B8UY_Rgb888; - -/** - * @} - */ - -/** @defgroup LS016B8UY_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup LS016B8UY_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LS016B8UY_Private_Variables - * @{ - */ -LCD_DrvTypeDef ls016b8uy_drv = -{ - ls016b8uy_Init, - ls016b8uy_ReadID, - ls016b8uy_DisplayOn, - ls016b8uy_DisplayOff, - ls016b8uy_SetCursor, - ls016b8uy_WritePixel, - ls016b8uy_ReadPixel, - ls016b8uy_SetDisplayWindow, - ls016b8uy_DrawHLine, - ls016b8uy_DrawVLine, - ls016b8uy_GetLcdPixelWidth, - ls016b8uy_GetLcdPixelHeight, - ls016b8uy_DrawBitmap, - ls016b8uy_DrawRGBImage, -}; - -static uint16_t WindowsXstart = 0; -static uint16_t WindowsYstart = 0; -static uint16_t WindowsXend = LS016B8UY_LCD_PIXEL_WIDTH-1; -static uint16_t WindowsYend = LS016B8UY_LCD_PIXEL_HEIGHT-1; -/** - * @} - */ - -/** @defgroup LS016B8UY_Private_FunctionPrototypes - * @{ - */ -static LS016B8UY_Rgb888 ls016b8uy_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos); -static void ls016b8uy_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata); - -/** - * @} - */ - -/** @defgroup LS016B8UY_Private_Functions - * @{ - */ - -/** - * @brief Initialize the LS016B8UY LCD Component. - * @param None - * @retval None - */ -void ls016b8uy_Init(void) -{ - uint8_t parameter[4]; - - /* Initialize LS016B8UY low level bus layer ----------------------------------*/ - LCD_IO_Init(); - - parameter[0] = 0x00; /* VSYNC output */ - ls016b8uy_WriteReg(LCD_CMD_VSYNC_OUTPUT, parameter, 1); - parameter[0] = 0x06; /* 18 bits color mode */ - ls016b8uy_WriteReg(LCD_CMD_COLOR_MODE, parameter, 1); - parameter[0] = 0x01; /* Panel setting command */ - parameter[1] = 0xFE; - ls016b8uy_WriteReg(LCD_CMD_PANEL_SETTING_1, parameter, 2); - parameter[0] = 0xDE; /* Panel setting command */ - parameter[1] = 0x21; - ls016b8uy_WriteReg(LCD_CMD_PANEL_SETTING_2, parameter, 2); - parameter[0] = 0x05; /* V-Porch setting */ - parameter[1] = 0x33; - ls016b8uy_WriteReg(LCD_CMD_PANEL_V_PORCH, parameter, 2); - parameter[0] = 0x05; /* Idle mode V-Porch setting */ - parameter[1] = 0x33; - ls016b8uy_WriteReg(LCD_CMD_PANEL_IDLE_V_PORCH, parameter, 2); - parameter[0] = 0x04; /* panel timing setting */ - parameter[1] = 0x03; - ls016b8uy_WriteReg(LCD_CMD_PANEL_TIMING_1, parameter, 2); - parameter[0] = 0x5E; /* panel timing setting */ - parameter[1] = 0x08; - ls016b8uy_WriteReg(LCD_CMD_PANEL_TIMING_2, parameter, 2); - parameter[0] = 0x0A; /* panel timing setting */ - parameter[1] = 0x0C; - parameter[2] = 0x02; - ls016b8uy_WriteReg(LCD_CMD_PANEL_TIMING_3, parameter, 3); - parameter[0] = 0x03; /* panel timing setting */ - parameter[1] = 0x04; - ls016b8uy_WriteReg(LCD_CMD_PANEL_TIMING_4, parameter, 2); - parameter[0] = 0x0C; /* panel power setting */ - ls016b8uy_WriteReg(LCD_CMD_PANEL_POWER, parameter, 1); - parameter[0] = 0x02; /* Oscillator Setting = 2MHz */ - ls016b8uy_WriteReg(LCD_CMD_OSCILLATOR, parameter, 1); - parameter[0] = 0x53; /* GVDD = 4.76V setting */ - ls016b8uy_WriteReg(LCD_CMD_GVDD, parameter, 1); - parameter[0] = 0x00; /* Reload MTP After SLPOUT */ - parameter[1] = 0x45; /* VCOMH=3.76V */ - ls016b8uy_WriteReg(LCD_CMD_RELOAD_MTP_VCOMH, parameter, 2); - parameter[0] = 0x03; /* OP-Amp Ability. (Normal) */ - parameter[1] = 0x12; /* Step-up Cycle for AVDD Booster Freq./4 */ - ls016b8uy_WriteReg(LCD_CMD_OPAMP, parameter, 2); - parameter[0] = 0x00; /* Tearing Effect Option (00h:VSYNC Interface OFF, 01h:VSYNC Interface ON) */ - ls016b8uy_WriteReg(LCD_CMD_TEARING_EFFECT, parameter, 1); - ls016b8uy_WriteReg(LCD_CMD_PANEL_SETTING_LOCK, parameter, 0); /* Panel setting command */ - ls016b8uy_WriteReg(LCD_CMD_SLEEP_OUT, parameter, 0); /* Sleep Out Command */ - LCD_IO_Delay(150); /* Wait for 150ms */ - - parameter[0] = 0x00; /* CASET */ - parameter[1] = 0x1E; - parameter[2] = 0x00; - parameter[3] = 0xD1; - ls016b8uy_WriteReg(LCD_CMD_CASET, parameter, 4); - parameter[0] = 0x00; /* RASET */ - parameter[1] = 0x00; - parameter[2] = 0x00; - parameter[3] = 0xB3; - ls016b8uy_WriteReg(LCD_CMD_RASET, parameter, 4); - parameter[0] = 0x83; /* Normal display for Driver Down side */ - ls016b8uy_WriteReg(LCD_CMD_NORMAL_DISPLAY, parameter, 1); - - ls016b8uy_DisplayOn(); /* Display ON command */ - -} - -/** - * @brief Enables the Display. - * @param None - * @retval None - */ -void ls016b8uy_DisplayOn(void) -{ - ls016b8uy_WriteReg(LCD_CMD_DISPLAY_ON, (uint8_t*)NULL, 0); /* Display ON command */ - ls016b8uy_WriteReg(LCD_CMD_IDLE_MODE_OFF, (uint8_t*)NULL, 0); /* Idle mode OFF command */ -} - -/** - * @brief Disables the Display. - * @param None - * @retval None - */ -void ls016b8uy_DisplayOff(void) -{ - ls016b8uy_WriteReg(LCD_CMD_DISPLAY_OFF, (uint8_t*)NULL, 0); /* Display OFF command */ - LCD_IO_Delay(20); /* Wait for 20ms */ - ls016b8uy_WriteReg(LCD_CMD_SLEEP_IN, (uint8_t*)NULL, 0); /* Sleep In Command */ - LCD_IO_Delay(150); /* Wait for 150ms */ -} - -/** - * @brief Get the LCD pixel Width. - * @param None - * @retval The Lcd Pixel Width - */ -uint16_t ls016b8uy_GetLcdPixelWidth(void) -{ - return (uint16_t)LS016B8UY_LCD_PIXEL_WIDTH; -} - -/** - * @brief Get the LCD pixel Height. - * @param None - * @retval The Lcd Pixel Height - */ -uint16_t ls016b8uy_GetLcdPixelHeight(void) -{ - return (uint16_t)LS016B8UY_LCD_PIXEL_HEIGHT; -} - -/** - * @brief Get the LS016B8UY ID. - * @param None - * @retval The LS016B8UY ID - */ -uint16_t ls016b8uy_ReadID(void) -{ - LCD_IO_Init(); - /* TODO : LCD read ID command not known for now, so assumption that the connected LCD is LS016B8UY */ - return (LS016B8UY_ID); -} - -/** - * @brief Set Cursor position. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval None - */ -void ls016b8uy_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - uint8_t parameter[4]; - - parameter[0] = 0x00; /* CASET */ - parameter[1] = 0x1E + Xpos; - parameter[2] = 0x00; - parameter[3] = 0xD1 + Xpos; - ls016b8uy_WriteReg(LCD_CMD_CASET, parameter, 4); - parameter[0] = 0x00; /* RASET */ - parameter[1] = 0x00 + Ypos; - parameter[2] = 0x00; - parameter[3] = 0xB3 + Ypos; - ls016b8uy_WriteReg(LCD_CMD_RASET, parameter, 4); -} - -/** - * @brief Write pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param RGBCode: the RGB pixel color in RGB565 format - * @retval None - */ -void ls016b8uy_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode) -{ - uint16_t r, g, b; - uint16_t rgb888_part1, rgb888_part2; - - r = (RGBCode & 0xF800) >> 11; /* Extract red component from RGB565 pixel data */ - g = (RGBCode & 0x07E0) >> 5; /* Extract green component from RGB565 pixel data */ - b = (RGBCode & 0x001F) >> 0; /* Extract blue component from RGB565 pixel data */ - - /* Prepare data to write with new pixel components and read old pixel component */ - rgb888_part1 = (r << 11) + (g << 2); - rgb888_part2 = (b << 11); - - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, Ypos); - - /* Prepare to write to LCD RAM */ - ls016b8uy_WriteReg(LCD_CMD_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - /* Write RAM data */ - LCD_IO_WriteData(rgb888_part1); - LCD_IO_WriteData(rgb888_part2); -} - -/** - * @brief Read pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval The RGB pixel color in RGB565 format - */ -uint16_t ls016b8uy_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - LS016B8UY_Rgb888 rgb888; - uint8_t r, g, b; - uint16_t rgb565; - - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, Ypos); - - /* Read RGB888 data from LCD RAM */ - rgb888 = ls016b8uy_ReadPixel_rgb888(Xpos, Ypos); - - /* Convert RGB888 to RGB565 */ - r = ((rgb888.red & 0xF8) >> 3); /* Extract the red component 5 most significant bits */ - g = ((rgb888.green & 0xFC) >> 2); /* Extract the green component 6 most significant bits */ - b = ((rgb888.blue & 0xF8) >> 3); /* Extract the blue component 5 most significant bits */ - - rgb565 = ((uint16_t)(r) << 11) + ((uint16_t)(g) << 5) + ((uint16_t)(b) << 0); - - return (rgb565); -} - -/** - * @brief Writes to the selected LCD register. - * @param Command: command value (or register address as named in LS016B8UY doc). - * @param Parameters: pointer on parameters value (if command uses one or several parameters). - * @param NbParameters: number of command parameters (0 if no parameter) - * @retval None - */ -void ls016b8uy_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters) -{ - uint8_t i; - - /* Send command */ - LCD_IO_WriteReg(Command); - - /* Send command's parameters if any */ - for (i=0; i> 11; /* Extract red component from RGB565 pixel data */ - g = (RGBCode & 0x07E0) >> 5; /* Extract green component from RGB565 pixel data */ - b = (RGBCode & 0x001F) >> 0; /* Extract blue component from RGB565 pixel data */ - - rgb888_part1 = (r << 11) + (g << 2); /* Build pattern first part to write in LCD RAM */ - rgb888_part2 = (b << 11) + (r << 3); /* Build pattern second part to write in LCD RAM */ - rgb888_part3 = (g << 10) + (b << 3); /* Build pattern third part to write in LCD RAM */ - - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, Ypos); - - /* Prepare to write to LCD RAM */ - ls016b8uy_WriteReg(LCD_CMD_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - /* Sent a complete line */ - for(counter = 0; counter < Length; counter+=2) - { - /* Write 2 pixels at a time by performing 3 access (pixels coded on 24 bits in LCD RAM whereas access are coded on 16 bits) */ - LCD_IO_WriteData(rgb888_part1); - LCD_IO_WriteData(rgb888_part2); - if (counter != (Length-1)) /* When writing last pixel when Length is odd, the third part is not written */ - { - LCD_IO_WriteData(rgb888_part3); - } - } -} - -/** - * @brief Draw vertical line. - * @param RGBCode: Specifies the RGB color - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param Length: specifies the Line length. - * @retval None - */ -void ls016b8uy_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint16_t counter = 0; - - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, Ypos); - - /* Prepare to write to LCD RAM */ - ls016b8uy_WriteReg(LCD_CMD_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - /* Fill a complete vertical line */ - for(counter = 0; counter < Length; counter++) - { - ls016b8uy_WritePixel(Xpos, Ypos + counter, RGBCode); - } -} - -/** - * @brief Displays a bitmap picture. - * @param BmpAddress: Bmp picture address. - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @retval None - */ -void ls016b8uy_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, size = 0; - uint32_t posY; - uint32_t nb_line = 0; - uint16_t Xsize = WindowsXend - WindowsXstart + 1; - uint16_t Ysize = WindowsYend - WindowsYstart + 1; - - /* Read bitmap size */ - size = *(volatile uint16_t *) (pbmp + 2); - size |= (*(volatile uint16_t *) (pbmp + 4)) << 16; - /* Get bitmap data address offset */ - index = *(volatile uint16_t *) (pbmp + 10); - index |= (*(volatile uint16_t *) (pbmp + 12)) << 16; - size = (size - index)/2; - pbmp += index; - - for (posY = (Ypos + Ysize); posY > Ypos; posY--) /* In BMP files the line order is inverted */ - { - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, posY - 1); - - /* Draw one line of the picture */ - ls016b8uy_DrawRGBHLine(Xpos, posY - 1, Xsize, (pbmp + (nb_line * Xsize * 2))); - nb_line++; - } -} - -/** - * @brief Displays picture. - * @param pdata: picture address. - * @param Xpos: Image X position in the LCD - * @param Ypos: Image Y position in the LCD - * @param Xsize: Image X size in the LCD - * @param Ysize: Image Y size in the LCD - * @retval None - */ -void ls016b8uy_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - uint32_t posY; - uint32_t nb_line = 0; - - for (posY = Ypos; posY < (Ypos + Ysize); posY ++) - { - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, posY); - - /* Draw one line of the picture */ - ls016b8uy_DrawRGBHLine(Xpos, posY, Xsize, (pdata + (nb_line * Xsize * 2))); - nb_line++; - } -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ - -/** - * @brief Read pixel from LCD RAM in RGB888 format - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval Each RGB pixel color components in a structure - */ -static LS016B8UY_Rgb888 ls016b8uy_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos) -{ - LS016B8UY_Rgb888 rgb888; - uint16_t rgb888_part1, rgb888_part2; - - /* In LCD RAM, pixels are 24 bits packed and read with 16 bits access - * Here is the pixels components arrangement in memory : - * bits: 15 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00 - * address 0 : red pixel 0 X X | green pixel 0 X X - * address 1 : blue pixel 0 X X | red pixel 1 X X - * address 2 : green pixel 1 X X | blue pixel 1 X X - */ - - /* Set Cursor */ - ls016b8uy_SetCursor(Xpos, Ypos); - /* Prepare to read LCD RAM */ - ls016b8uy_WriteReg(LCD_CMD_READ_RAM, (uint8_t*)NULL, 0); /* RAM read data command */ - /* Dummy read */ - LCD_IO_ReadData(); - /* Read first part of the RGB888 data */ - rgb888_part1 = LCD_IO_ReadData(); - /* Read first part of the RGB888 data */ - rgb888_part2 = LCD_IO_ReadData(); - - /* red component */ - rgb888.red = (rgb888_part1 & 0xFC00) >> 8; - /* green component */ - rgb888.green = (rgb888_part1 & 0x00FC) >> 0; - /* blue component */ - rgb888.blue = (rgb888_part2 & 0xFC00) >> 8; - - return rgb888; -} - -/** - * @brief Displays a single picture line. - * @param pdata: picture address. - * @param Xpos: Image X position in the LCD - * @param Ypos: Image Y position in the LCD - * @param Xsize: Image X size in the LCD - * @retval None - */ -static void ls016b8uy_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata) -{ - uint32_t i = 0; - uint32_t posX; - uint16_t r, g, b; - uint16_t rgb888_part; - uint16_t *rgb565 = (uint16_t*)pdata; - - /* Prepare to write to LCD RAM */ - ls016b8uy_WriteReg(LCD_CMD_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - for (posX = Xpos; posX < (Xsize + Xpos); posX += 2) - { - if ((posX >= WindowsXstart) && (Ypos >= WindowsYstart) && /* Check we are in the defined window */ - (posX <= WindowsXend) && (Ypos <= WindowsYend)) - { - /* Write pixels in LCD RAM after RGB565 -> RGB888 conversion */ - /* As data in LCD RAM are 24bits packed, three 16 bits writes access are needed to transmit 2 pixels data */ - - r = (rgb565[i] & 0xF800) >> 11; /* Extract red component from first RGB565 pixel data */ - g = (rgb565[i] & 0x07E0) >> 5; /* Extract green component from first RGB565 pixel data */ - rgb888_part = (r << 11) + (g << 2); /* Build data to be written in LCD RAM */ - LCD_IO_WriteData(rgb888_part); - - b = (rgb565[i] & 0x001F) >> 0; /* Extract blue component from first RGB565 pixel data */ - r = (rgb565[i+1] & 0xF800) >> 11; /* Extract red component from second RGB565 pixel data */ - rgb888_part = (b << 11) + (r << 3); /* Build data to be written in LCD RAM */ - LCD_IO_WriteData(rgb888_part); - - if (posX != (Xsize + Xpos - 1)) /* When writing last pixel when size is odd, the third part is not written */ - { - g = (rgb565[i+1] & 0x07E0) >> 5; /* Extract green component from second RGB565 pixel data */ - b = (rgb565[i+1] & 0x001F) >> 0; /* Extract blue component from second RGB565 pixel data */ - rgb888_part = (g << 10) + (b << 3); /* Build data to be written in LCD RAM */ - LCD_IO_WriteData(rgb888_part); - } - - i += 2; - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ls016b8uy/ls016b8uy.h b/Drivers/BSP/Components/ls016b8uy/ls016b8uy.h deleted file mode 100644 index 4986853406..0000000000 --- a/Drivers/BSP/Components/ls016b8uy/ls016b8uy.h +++ /dev/null @@ -1,158 +0,0 @@ -/** - ****************************************************************************** - * @file ls016b8uy.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the ls016b8uy.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LS016B8UY_H -#define __LS016B8UY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include -#include "../Common/lcd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ls016b8uy - * @{ - */ - -/** @defgroup LS016B8UY_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup LS016B8UY_Exported_Constants - * @{ - */ -/** - * @brief LS016B8UY ID - */ -#define LS016B8UY_ID 0xFFFF - -/** - * @brief LS016B8UY Size - */ -#define LS016B8UY_LCD_PIXEL_WIDTH ((uint16_t)180) -#define LS016B8UY_LCD_PIXEL_HEIGHT ((uint16_t)180) - -/** - * @brief LS016B8UY Registers - */ -#define LCD_CMD_SLEEP_IN 0x10 -#define LCD_CMD_SLEEP_OUT 0x11 -#define LCD_CMD_DISPLAY_OFF 0x28 -#define LCD_CMD_DISPLAY_ON 0x29 -#define LCD_CMD_WRITE_RAM 0x2C -#define LCD_CMD_READ_RAM 0x2E -#define LCD_CMD_CASET 0x2A -#define LCD_CMD_RASET 0x2B -#define LCD_CMD_VSYNC_OUTPUT 0x35 -#define LCD_CMD_NORMAL_DISPLAY 0x36 -#define LCD_CMD_IDLE_MODE_OFF 0x38 -#define LCD_CMD_IDLE_MODE_ON 0x39 -#define LCD_CMD_COLOR_MODE 0x3A -#define LCD_CMD_PANEL_SETTING_1 0xB0 -#define LCD_CMD_PANEL_SETTING_2 0xB1 -#define LCD_CMD_OSCILLATOR 0xB3 -#define LCD_CMD_PANEL_SETTING_LOCK 0xB4 -#define LCD_CMD_PANEL_V_PORCH 0xB7 -#define LCD_CMD_PANEL_IDLE_V_PORCH 0xB8 -#define LCD_CMD_GVDD 0xC0 -#define LCD_CMD_OPAMP 0xC2 -#define LCD_CMD_RELOAD_MTP_VCOMH 0xC5 -#define LCD_CMD_PANEL_TIMING_1 0xC8 -#define LCD_CMD_PANEL_TIMING_2 0xC9 -#define LCD_CMD_PANEL_TIMING_3 0xCA -#define LCD_CMD_PANEL_TIMING_4 0xCC -#define LCD_CMD_PANEL_POWER 0xD0 -#define LCD_CMD_TEARING_EFFECT 0xDD - -/** - * @} - */ - -/** @defgroup LS016B8UY_Exported_Functions - * @{ - */ -void ls016b8uy_Init(void); -uint16_t ls016b8uy_ReadID(void); -void ls016b8uy_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters); -uint8_t ls016b8uy_ReadReg(uint8_t Command); - -void ls016b8uy_DisplayOn(void); -void ls016b8uy_DisplayOff(void); -void ls016b8uy_SetCursor(uint16_t Xpos, uint16_t Ypos); -void ls016b8uy_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode); -uint16_t ls016b8uy_ReadPixel(uint16_t Xpos, uint16_t Ypos); - -void ls016b8uy_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ls016b8uy_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ls016b8uy_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void ls016b8uy_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata); - -void ls016b8uy_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); - - -uint16_t ls016b8uy_GetLcdPixelWidth(void); -uint16_t ls016b8uy_GetLcdPixelHeight(void); - -/* LCD driver structure */ -extern LCD_DrvTypeDef ls016b8uy_drv; - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size); -void LCD_IO_WriteReg(uint8_t Reg); -void LCD_IO_WriteData(uint16_t RegValue); -uint16_t LCD_IO_ReadData(void); -void LCD_IO_Delay(uint32_t delay); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LS016B8UY_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lsm303agr b/Drivers/BSP/Components/lsm303agr new file mode 160000 index 0000000000..08a4454a53 --- /dev/null +++ b/Drivers/BSP/Components/lsm303agr @@ -0,0 +1 @@ +Subproject commit 08a4454a5359e2e0dee283b6df8ebbbae6366f14 diff --git a/Drivers/BSP/Components/lsm303agr/LICENSE.md b/Drivers/BSP/Components/lsm303agr/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/lsm303agr/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/lsm303agr/Release_Notes.html b/Drivers/BSP/Components/lsm303agr/Release_Notes.html deleted file mode 100644 index 3a7830a9e1..0000000000 --- a/Drivers/BSP/Components/lsm303agr/Release_Notes.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Release Notes for LSM303AGR Component Driver - - - - - - -
-
-
-

Release Notes for

-

LSM303AGR Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the LSM303AGR Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/lsm303agr/_htmresc/favicon.png b/Drivers/BSP/Components/lsm303agr/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/lsm303agr/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/lsm303agr/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/lsm303agr/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/lsm303agr/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/lsm303agr/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/lsm303agr/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/lsm303agr/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/lsm303agr/lsm303agr.c b/Drivers/BSP/Components/lsm303agr/lsm303agr.c deleted file mode 100644 index 6310d15bd9..0000000000 --- a/Drivers/BSP/Components/lsm303agr/lsm303agr.c +++ /dev/null @@ -1,609 +0,0 @@ -/** - ****************************************************************************** - * @file lsm303agr.c - * @author MCD Application Team - * @version V1.0.0 - * @date 10-October-2016 - * @brief This file provides a set of functions needed to manage the lsm303agr - * MEMS accelerometer. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "lsm303agr.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LSM303AGR - * @{ - */ - -/** @defgroup LSM303AGR_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303AGR_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303AGR_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303AGR_Private_Variables - * @{ - */ -ACCELERO_DrvTypeDef Lsm303agrDrv = -{ - LSM303AGR_AccInit, - LSM303AGR_AccDeInit, - LSM303AGR_AccReadID, - LSM303AGR_AccRebootCmd, - 0, - LSM303AGR_AccZClickITConfig, - 0, - 0, - 0, - 0, - LSM303AGR_AccFilterConfig, - LSM303AGR_AccFilterCmd, - LSM303AGR_AccReadXYZ -}; - -uint8_t tmpreg2A[8] = {0x00}; -uint8_t tmpreg3A = 0x00; -uint8_t tmpregcfgA = 0x00; - -/** - * @} - */ - -/** @defgroup LSM303AGR_Private_Functions - * @{ - */ - -/** - * @brief Set LSM303AGR Initialization. - * @param InitStruct: Init parameters - * @retval None - */ -void LSM303AGR_AccInit(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Low level init */ - COMPASSACCELERO_IO_Init(); - - /* Write value to ACC MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG1_A, ctrl); - - /* Write value to ACC MEMS CTRL_REG4 register */ - ctrl = (uint8_t) (InitStruct << 8); - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG4_A, ctrl); -} - -/** - * @brief LSM303AGR De-initialization. - * @param None - * @retval None - */ -void LSM303AGR_AccDeInit(void) -{ -} - -/** - * @brief Read LSM303AGR ID. - * @param None - * @retval ID - */ -uint8_t LSM303AGR_AccReadID(void) -{ - uint8_t ctrl = 0x00; - - /* Low level init */ - COMPASSACCELERO_IO_Init(); - - /* Read value at Who am I register address */ - ctrl = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_WHO_AM_I_ADDR); - - return ctrl; -} - -/** - * @brief Reboot memory content of LSM303AGR - * @param None - * @retval None - */ -void LSM303AGR_AccRebootCmd(void) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG5_A); - - /* Enable or Disable the reboot memory */ - tmpreg |= LSM303AGR_BOOT_REBOOTMEMORY; - - /* Write value to ACC MEMS CTRL_REG5 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG5_A, tmpreg); -} - -/** - * @brief Set High Pass Filter Modality - * @param FilterStruct: contains data for filter config - * @retval None - */ -void LSM303AGR_AccFilterConfig(uint8_t FilterStruct) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A); - - tmpreg &= 0x0C; - tmpreg |= FilterStruct; - - /* Write value to ACC MEMS CTRL_REG2 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Enable or Disable High Pass Filter - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: LSM303AGR_HIGHPASSFILTER_DISABLE - * @arg: LSM303AGR_HIGHPASSFILTER_ENABLE - * @retval None - */ -void LSM303AGR_AccFilterCmd(uint8_t HighPassFilterState) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A); - - tmpreg &= 0xF7; - - tmpreg |= HighPassFilterState; - - /* Write value to ACC MEMS CTRL_REG2 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Read X, Y & Z Acceleration values - * @param pData: Data out pointer - * @retval None - */ -void LSM303AGR_AccReadXYZ(int16_t* pData) -{ - int16_t pnRawData[3]; - uint8_t ctrlx[2]={0,0}; - int8_t buffer[6]; - uint8_t i = 0; - uint8_t sensitivity = LSM303AGR_ACC_SENSITIVITY_2G; - - /* Read the acceleration control register content */ - ctrlx[0] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG4_A); - ctrlx[1] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG5_A); - - /* Read output register X, Y & Z acceleration */ - buffer[0] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_X_L_A); - buffer[1] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_X_H_A); - buffer[2] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_Y_L_A); - buffer[3] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_Y_H_A); - buffer[4] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_Z_L_A); - buffer[5] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_OUT_Z_H_A); - - /* Check in the control register4 the data alignment*/ - if(!(ctrlx[0] & LSM303AGR_BLE_MSB)) - { - for(i=0; i<3; i++) - { - pnRawData[i]=((int16_t)((uint16_t)buffer[2*i+1] << 8) + buffer[2*i]); - } - } - else /* Big Endian Mode */ - { - for(i=0; i<3; i++) - { - pnRawData[i]=((int16_t)((uint16_t)buffer[2*i] << 8) + buffer[2*i+1]); - } - } - - /* Normal mode */ - /* Switch the sensitivity value set in the CRTL4 */ - switch(ctrlx[0] & LSM303AGR_FULLSCALE_16G) - { - case LSM303AGR_FULLSCALE_2G: - sensitivity = LSM303AGR_ACC_SENSITIVITY_2G; - break; - case LSM303AGR_FULLSCALE_4G: - sensitivity = LSM303AGR_ACC_SENSITIVITY_4G; - break; - case LSM303AGR_FULLSCALE_8G: - sensitivity = LSM303AGR_ACC_SENSITIVITY_8G; - break; - case LSM303AGR_FULLSCALE_16G: - sensitivity = LSM303AGR_ACC_SENSITIVITY_16G; - break; - } - - /* Obtain the mg value for the three axis */ - for(i=0; i<3; i++) - { - pData[i]=(pnRawData[i] * sensitivity); - } -} - -/** - * @brief Enable or Disable High Pass Filter on CLick - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: LSM303AGR_HPF_CLICK_DISABLE - * @arg: LSM303AGR_HPF_CLICK_ENABLE - * @retval None - */ -void LSM303AGR_AccFilterClickCmd(uint8_t HighPassFilterClickState) -{ - uint8_t tmpreg = 0x00; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A); - - tmpreg &= ~(LSM303AGR_HPF_CLICK_ENABLE); - - tmpreg |= HighPassFilterClickState; - - /* Write value to ACC MEMS CTRL_REG2 regsister */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Enable LSM303AGR Interrupt1 - * @param LSM303AGR_IT: specifies the LSM303AGR interrupt source to be enabled. - * This parameter can be any combination of the following values: - * @arg LSM303AGR_IT1_CLICK - * @arg LSM303AGR_IT1_AOI1 - * @arg LSM303AGR_IT1_AOI2 - * @arg LSM303AGR_IT1_DRY1 - * @arg LSM303AGR_IT1_DRY2 - * @arg LSM303AGR_IT1_WTM - * @arg LSM303AGR_IT1_OVERRUN - * @retval None - */ -void LSM303AGR_AccIT1Enable(uint8_t LSM303AGR_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG3_A); - - /* Enable IT1 */ - tmpval |= LSM303AGR_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG3_A, tmpval); -} - -/** - * @brief Disable LSM303AGR Interrupt1 - * @param LSM303AGR_IT: specifies the LSM303AGR interrupt source to be disabled. - * This parameter can be any combination of the following values: - * @arg LSM303AGR_IT1_CLICK - * @arg LSM303AGR_IT1_AOI1 - * @arg LSM303AGR_IT1_AOI2 - * @arg LSM303AGR_IT1_DRY1 - * @arg LSM303AGR_IT1_DRY2 - * @arg LSM303AGR_IT1_WTM - * @arg LSM303AGR_IT1_OVERRUN - * @retval None - */ -void LSM303AGR_AccIT1Disable(uint8_t LSM303AGR_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG3_A); - - /* Disable IT1 */ - tmpval &= ~LSM303AGR_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG3_A, tmpval); -} - -/** - * @brief Enable LSM303AGR Interrupt2 - * @param LSM303AGR_IT: specifies the LSM303AGR interrupt source to be enabled. - * This parameter can be any combination of the following values: - * @arg LSM303AGR_IT2_CLICK - * @arg LSM303AGR_IT2_INT1 - * @arg LSM303AGR_IT2_INT2 - * @arg LSM303AGR_IT2_BOOT - * @arg LSM303AGR_IT2_ACT - * @arg LSM303AGR_IT2_HLACTIVE - * @retval None - */ -void LSM303AGR_AccIT2Enable(uint8_t LSM303AGR_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG6_A); - - /* Enable IT2 */ - tmpval |= LSM303AGR_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG6_A, tmpval); -} - -/** - * @brief Disable LSM303AGR Interrupt2 - * @param LSM303AGR_IT: specifies the LSM303AGR interrupt source to be disabled. - * This parameter can be any combination of the following values: - * @arg LSM303AGR_IT2_CLICK - * @arg LSM303AGR_IT2_INT1 - * @arg LSM303AGR_IT2_INT2 - * @arg LSM303AGR_IT2_BOOT - * @arg LSM303AGR_IT2_ACT - * @arg LSM303AGR_IT2_HLACTIVE - * @retval None - */ -void LSM303AGR_AccIT2Disable(uint8_t LSM303AGR_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG6_A); - - /* Disable IT2 */ - tmpval &= ~LSM303AGR_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CTRL_REG6_A, tmpval); -} - -/** - * @brief INT1 interrupt enable - * @param ITCombination: Or or And combination - * ITAxes: Axes to be enabled - * @retval None - */ -void LSM303AGR_AccINT1InterruptEnable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT1_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_INT1_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= (ITAxes | ITCombination); - - /* Write value to MEMS INT1_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_INT1_CFG_A, tmpval); -} - -/** - * @brief INT1 interrupt disable - * @param ITCombination: Or or And combination - * ITAxes: Axes to be enabled - * @retval None - */ -void LSM303AGR_AccINT1InterruptDisable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT1_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_INT1_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~(ITAxes | ITCombination); - - /* Write value to MEMS INT1_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_INT1_CFG_A, tmpval); -} - -/** - * @brief INT2 interrupt enable - * @param ITCombination: Or or And combination - * ITAxes: axes to be enabled - * @retval None - */ -void LSM303AGR_AccINT2InterruptEnable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT2_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_INT2_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= (ITAxes | ITCombination); - - /* Write value to MEMS INT2_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_INT2_CFG_A, tmpval); -} - -/** - * @brief INT2 interrupt config - * @param ITCombination: Or or And combination - * ITAxes: axes to be enabled - * @retval None - */ -void LSM303AGR_AccINT2InterruptDisable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT2_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_INT2_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~(ITAxes | ITCombination); - - /* Write value to MEMS INT2_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_INT2_CFG_A, tmpval); -} - -/** - * @brief Click interrupt enable - * @param ITClick: the selected interrupt to enable - * @retval None - */ -void LSM303AGR_AccClickITEnable(uint8_t ITClick) -{ - uint8_t tmpval = 0x00; - - /* Read CLICK_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CLICK_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= ITClick; - - /* Write value to MEMS CLICK CFG register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CLICK_CFG_A, tmpval); - - /* Configure Click Threshold on Z axis */ - tmpval = 0x0A; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CLICK_THS_A, tmpval); - - /* Configure Time Limit */ - tmpval = 0x05; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_TIME_LIMIT_A, tmpval); - - /* Configure Latency */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_TIME_LATENCY_A, tmpval); - - /* Configure Click Window */ - tmpval = 0x32; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_TIME_WINDOW_A, tmpval); -} - -/** - * @brief Click interrupt disable - * @param ITClick: the selected click interrupt to disable - * @retval None - */ -void LSM303AGR_AccClickITDisable(uint8_t ITClick) -{ - uint8_t tmpval = 0x00; - - /* Read CLICK_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303AGR_CLICK_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~ITClick; - - /* Write value to MEMS CLICK_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303AGR_CLICK_CFG_A, tmpval); -} - -/** - * @brief Click on Z axis interrupt config - * @param None - * @retval None - */ -void LSM303AGR_AccZClickITConfig(void) -{ - /* Configure low level IT config */ - COMPASSACCELERO_IO_ITConfig(); - - /* Select click IT as INT1 interrupt */ - LSM303AGR_AccIT1Enable(LSM303AGR_IT1_CLICK); - - /* Enable High pass filter for click IT */ - LSM303AGR_AccFilterClickCmd(LSM303AGR_HPF_CLICK_ENABLE); - - /* Enable simple click IT on Z axis, */ - LSM303AGR_AccClickITEnable(LSM303AGR_Z_SINGLE_CLICK); -} - -#ifdef MAGNET -/** - * @brief Set LSM303AGR Mag Initialization. - * @param LSM303AGR_InitStruct: pointer to a LSM303AGR_MagInitTypeDef structure - * that contains the configuration setting for the LSM303AGR. - * @retval None - */ -void LSM303AGR_MagInit(LSM303AGRMag_InitTypeDef *LSM303AGR_InitStruct) -{ - uint8_t cra_regm = 0x00, crb_regm = 0x00, mr_regm = 0x00; - - /* Configure MEMS: temp and Data rate */ - cra_regm |= (uint8_t) (LSM303AGR_InitStruct->Temperature_Sensor | LSM303AGR_InitStruct->MagOutput_DataRate); - - /* Configure MEMS: full Scale */ - crb_regm |= (uint8_t) (LSM303AGR_InitStruct->MagFull_Scale); - - /* Configure MEMS: working mode */ - mr_regm |= (uint8_t) (LSM303AGR_InitStruct->Working_Mode); - - /* Write value to Mag MEMS CRA_REG register */ - COMPASSACCELERO_IO_Write(MAG_I2C_ADDRESS, LSM303AGR_CRA_REG_M, 1, &cra_regm); - - /* Write value to Mag MEMS CRB_REG register */ - COMPASSACCELERO_IO_Write(MAG_I2C_ADDRESS, LSM303AGR_CRB_REG_M, 1, &crb_regm); - - /* Write value to Mag MEMS MR_REG register */ - COMPASSACCELERO_IO_Write(MAG_I2C_ADDRESS, LSM303AGR_MR_REG_M, 1, &mr_regm); -} - -/** - * @brief Get status for Mag LSM303AGR data - * @param None - * @retval Data status in a LSM303AGR Data register - */ -uint8_t LSM303AGR_MagGetDataStatus(void) -{ - uint8_t tmpreg; - - /* Read Mag STATUS register */ - COMPASSACCELERO_IO_Read(MAG_I2C_ADDRESS, LSM303AGR_SR_REG_M, 1, &tmpreg); - - return tmpreg; -} -#endif /* MAGNET */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lsm303agr/lsm303agr.h b/Drivers/BSP/Components/lsm303agr/lsm303agr.h deleted file mode 100644 index d7a6a218b1..0000000000 --- a/Drivers/BSP/Components/lsm303agr/lsm303agr.h +++ /dev/null @@ -1,502 +0,0 @@ -/** - ****************************************************************************** - * @file lsm303agr.h - * @author MCD Application Team - * @version V1.0.0 - * @date 10-October-2016 - * @brief This file contains all the functions prototypes for the lsm303agr.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LSM303AGR_H -#define __LSM303AGR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/accelero.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LSM303AGR - * @{ - */ - -/** @defgroup LSM303AGR_Exported_Types - * @{ - */ - -/** - * @} - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ -/* Exported constant IO ------------------------------------------------------*/ -#define ACC_I2C_ADDRESS 0x32 -#define MAG_I2C_ADDRESS 0x3C - -/* Temperature sensor Registers (New vs lsm303dlhc.h) */ -#define LSM303AGR_STATUS_REG_AUX_A 0x07 /* status register */ -#define LSM303AGR_OUT_TEMP_L_A 0x0C /* output temperature register */ -#define LSM303AGR_OUT_TEMP_H_A 0x0D /* output temperature register */ -#define LSM303AGR_IN_COUNTER_REG_A 0x0E /* register */ -/* Acceleration Registers */ -#define LSM303AGR_WHO_AM_I_ADDR 0x0F /* device identification register (0x33) */ -#define LSM303AGR_WHO_AM_I_A LSM303AGR_WHO_AM_I_ADDR -/* Temperature sensor Registers (New vs lsm303dlhc.h) */ -#define LSM303AGR_TEMP_CFG_REG_A 0x1F /* temperature configuration register */ -/* Acceleration Registers */ -#define LSM303AGR_CTRL_REG1_A 0x20 /* Control register 1 acceleration */ -#define LSM303AGR_CTRL_REG2_A 0x21 /* Control register 2 acceleration */ -#define LSM303AGR_CTRL_REG3_A 0x22 /* Control register 3 acceleration */ -#define LSM303AGR_CTRL_REG4_A 0x23 /* Control register 4 acceleration */ -#define LSM303AGR_CTRL_REG5_A 0x24 /* Control register 5 acceleration */ -#define LSM303AGR_CTRL_REG6_A 0x25 /* Control register 6 acceleration */ -#define LSM303AGR_REFERENCE_A 0x26 /* Reference register acceleration */ -#define LSM303AGR_STATUS_REG_A 0x27 /* Status register acceleration */ -#define LSM303AGR_OUT_X_L_A 0x28 /* Output Register X acceleration */ -#define LSM303AGR_OUT_X_H_A 0x29 /* Output Register X acceleration */ -#define LSM303AGR_OUT_Y_L_A 0x2A /* Output Register Y acceleration */ -#define LSM303AGR_OUT_Y_H_A 0x2B /* Output Register Y acceleration */ -#define LSM303AGR_OUT_Z_L_A 0x2C /* Output Register Z acceleration */ -#define LSM303AGR_OUT_Z_H_A 0x2D /* Output Register Z acceleration */ -#define LSM303AGR_FIFO_CTRL_REG_A 0x2E /* Fifo control Register acceleration */ -#define LSM303AGR_FIFO_SRC_REG_A 0x2F /* Fifo src Register acceleration */ - -#define LSM303AGR_INT1_CFG_A 0x30 /* Interrupt 1 configuration Register acceleration */ -#define LSM303AGR_INT1_SOURCE_A 0x31 /* Interrupt 1 source Register acceleration */ -#define LSM303AGR_INT1_THS_A 0x32 /* Interrupt 1 Threshold register acceleration */ -#define LSM303AGR_INT1_DURATION_A 0x33 /* Interrupt 1 DURATION register acceleration */ - -#define LSM303AGR_INT2_CFG_A 0x34 /* Interrupt 2 configuration Register acceleration */ -#define LSM303AGR_INT2_SOURCE_A 0x35 /* Interrupt 2 source Register acceleration */ -#define LSM303AGR_INT2_THS_A 0x36 /* Interrupt 2 Threshold register acceleration */ -#define LSM303AGR_INT2_DURATION_A 0x37 /* Interrupt 2 DURATION register acceleration */ - -#define LSM303AGR_CLICK_CFG_A 0x38 /* Click configuration Register acceleration */ -#define LSM303AGR_CLICK_SOURCE_A 0x39 /* Click 2 source Register acceleration */ -#define LSM303AGR_CLICK_THS_A 0x3A /* Click 2 Threshold register acceleration */ - -#define LSM303AGR_TIME_LIMIT_A 0x3B /* Time Limit Register acceleration */ -#define LSM303AGR_TIME_LATENCY_A 0x3C /* Time Latency Register acceleration */ -#define LSM303AGR_TIME_WINDOW_A 0x3D /* Time window register acceleration */ - -/* System Registers(New vs lsm303dlhc.h) */ -#define LSM303AGR_Act_THS_A 0x3E /* return to sleep activation threshold register */ -#define LSM303AGR_Act_DUR_A 0x3F /* return to sleep duration register */ -/* Magnetometer */ -#define LSM303AGR_X_REG_L_M 0x45 /* Hard-iron X magnetic field */ -#define LSM303AGR_X_REG_H_M 0x46 /* Hard-iron X magnetic field */ -#define LSM303AGR_Y_REG_L_M 0x47 /* Hard-iron Y magnetic field */ -#define LSM303AGR_Y_REG_H_M 0x48 /* Hard-iron Y magnetic field */ -#define LSM303AGR_Z_REG_L_M 0x49 /* Hard-iron Z magnetic field */ -#define LSM303AGR_Z_REH_H_M 0x4A /* Hard-iron Z magnetic field */ -#define LSM303AGR_WHO_AM_I_M 0x4F /* Who am i register magnetic field (0x40) */ -#define LSM303AGR_CFG_REG_A_M 0x60 /* Configuration register A magnetic field */ -#define LSM303AGR_CFG_REG_B_M 0x61 /* Configuration register B magnetic field */ -#define LSM303AGR_CFG_REG_C_M 0x62 /* Configuration register C magnetic field */ -#define LSM303AGR_INT_CTRL_REG_M 0x63 /* interrupt control register magnetic field */ -#define LSM303AGR_INT_SOURCE_REG_M 0x64 /* interrupt source register magnetic field */ -#define LSM303AGR_INT_THS_L_REG_M 0x65 /* interrupt threshold register magnetic field */ -#define LSM303AGR_INT_THS_H_REG_M 0x66 /* interrupt threshold register magnetic field*/ -#define LSM303AGR_STATUS_REG_M 0x67 /* Status Register magnetic field */ -#define LSM303AGR_OUTX_L_REG_M 0x68 /* Output Register X magnetic field */ -#define LSM303AGR_OUTX_H_REG_M 0x69 /* Output Register X magnetic field */ -#define LSM303AGR_OUTY_L_REG_M 0x6A /* Output Register X magnetic field */ -#define LSM303AGR_OUTY_H_REG_M 0x6B /* Output Register X magnetic field */ -#define LSM303AGR_OUTZ_L_REG_M 0x6C /* Output Register X magnetic field */ -#define LSM303AGR_OUTZ_H_REG_M 0x6D /* Output Register X magnetic field */ - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ - -#define I_AM_LSM303AGR ((uint8_t)0x33) - -/** @defgroup Acc_Power_Mode_selection - * @{ - */ -#define LSM303AGR_NORMAL_MODE ((uint8_t)0x00) -#define LSM303AGR_LOWPOWER_MODE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Acc_OutPut_DataRate_Selection - * @{ - */ -#define LSM303AGR_ODR_1_HZ ((uint8_t)0x10) /*!< Output Data Rate = 1 Hz */ -#define LSM303AGR_ODR_10_HZ ((uint8_t)0x20) /*!< Output Data Rate = 10 Hz */ -#define LSM303AGR_ODR_25_HZ ((uint8_t)0x30) /*!< Output Data Rate = 25 Hz */ -#define LSM303AGR_ODR_50_HZ ((uint8_t)0x40) /*!< Output Data Rate = 50 Hz */ -#define LSM303AGR_ODR_100_HZ ((uint8_t)0x50) /*!< Output Data Rate = 100 Hz */ -#define LSM303AGR_ODR_200_HZ ((uint8_t)0x60) /*!< Output Data Rate = 200 Hz */ -#define LSM303AGR_ODR_400_HZ ((uint8_t)0x70) /*!< Output Data Rate = 400 Hz */ -#define LSM303AGR_ODR_1620_HZ_LP ((uint8_t)0x80) /*!< Output Data Rate = 1620 Hz only in Low Power Mode */ -#define LSM303AGR_ODR_1344_HZ ((uint8_t)0x90) /*!< Output Data Rate = 1344 Hz in Normal mode and 5376 Hz in Low Power Mode */ -/** - * @} - */ - -/** @defgroup Acc_Axes_Selection - * @{ - */ -#define LSM303AGR_X_ENABLE ((uint8_t)0x01) -#define LSM303AGR_Y_ENABLE ((uint8_t)0x02) -#define LSM303AGR_Z_ENABLE ((uint8_t)0x04) -#define LSM303AGR_AXES_ENABLE ((uint8_t)0x07) -#define LSM303AGR_AXES_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Acc_High_Resolution - * @{ - */ -#define LSM303AGR_HR_ENABLE ((uint8_t)0x08) -#define LSM303AGR_HR_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Acc_Full_Scale_Selection - * @{ - */ -#define LSM303AGR_FULLSCALE_2G ((uint8_t)0x00) /*!< ±2 g */ -#define LSM303AGR_FULLSCALE_4G ((uint8_t)0x10) /*!< ±4 g */ -#define LSM303AGR_FULLSCALE_8G ((uint8_t)0x20) /*!< ±8 g */ -#define LSM303AGR_FULLSCALE_16G ((uint8_t)0x30) /*!< ±16 g */ -/** - * @} - */ - -/** @defgroup Acc_Full_Scale_Selection - * @{ - */ -#define LSM303AGR_ACC_SENSITIVITY_2G ((uint8_t)1) /*!< accelerometer sensitivity with 2 g full scale [mg/LSB] */ -#define LSM303AGR_ACC_SENSITIVITY_4G ((uint8_t)2) /*!< accelerometer sensitivity with 4 g full scale [mg/LSB] */ -#define LSM303AGR_ACC_SENSITIVITY_8G ((uint8_t)4) /*!< accelerometer sensitivity with 8 g full scale [mg/LSB] */ -#define LSM303AGR_ACC_SENSITIVITY_16G ((uint8_t)12) /*!< accelerometer sensitivity with 12 g full scale [mg/LSB] */ -/** - * @} - */ - -/** @defgroup Acc_Block_Data_Update - * @{ - */ -#define LSM303AGR_BlockUpdate_Continous ((uint8_t)0x00) /*!< Continuos Update */ -#define LSM303AGR_BlockUpdate_Single ((uint8_t)0x80) /*!< Single Update: output registers not updated until MSB and LSB reading */ -/** - * @} - */ - -/** @defgroup Acc_Endian_Data_selection - * @{ - */ -#define LSM303AGR_BLE_LSB ((uint8_t)0x00) /*!< Little Endian: data LSB @ lower address */ -#define LSM303AGR_BLE_MSB ((uint8_t)0x40) /*!< Big Endian: data MSB @ lower address */ -/** - * @} - */ - -/** @defgroup Acc_Boot_Mode_selection - * @{ - */ -#define LSM303AGR_BOOT_NORMALMODE ((uint8_t)0x00) -#define LSM303AGR_BOOT_REBOOTMEMORY ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_Mode - * @{ - */ -#define LSM303AGR_HPM_NORMAL_MODE_RES ((uint8_t)0x00) -#define LSM303AGR_HPM_REF_SIGNAL ((uint8_t)0x40) -#define LSM303AGR_HPM_NORMAL_MODE ((uint8_t)0x80) -#define LSM303AGR_HPM_AUTORESET_INT ((uint8_t)0xC0) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_CUT OFF_Frequency - * @{ - */ -#define LSM303AGR_HPFCF_8 ((uint8_t)0x00) -#define LSM303AGR_HPFCF_16 ((uint8_t)0x10) -#define LSM303AGR_HPFCF_32 ((uint8_t)0x20) -#define LSM303AGR_HPFCF_64 ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_status - * @{ - */ -#define LSM303AGR_HIGHPASSFILTER_DISABLE ((uint8_t)0x00) -#define LSM303AGR_HIGHPASSFILTER_ENABLE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_Click_status - * @{ - */ -#define LSM303AGR_HPF_CLICK_DISABLE ((uint8_t)0x00) -#define LSM303AGR_HPF_CLICK_ENABLE ((uint8_t)0x04) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_AOI1_status - * @{ - */ -#define LSM303AGR_HPF_AOI1_DISABLE ((uint8_t)0x00) -#define LSM303AGR_HPF_AOI1_ENABLE ((uint8_t)0x01) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_AOI2_status - * @{ - */ -#define LSM303AGR_HPF_AOI2_DISABLE ((uint8_t)0x00) -#define LSM303AGR_HPF_AOI2_ENABLE ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_Interrupt1_Configuration_definition - * @{ - */ -#define LSM303AGR_IT1_CLICK ((uint8_t)0x80) -#define LSM303AGR_IT1_AOI1 ((uint8_t)0x40) -#define LSM303AGR_IT1_AOI2 ((uint8_t)0x20) -#define LSM303AGR_IT1_DRY1 ((uint8_t)0x10) -#define LSM303AGR_IT1_DRY2 ((uint8_t)0x08) -#define LSM303AGR_IT1_WTM ((uint8_t)0x04) -#define LSM303AGR_IT1_OVERRUN ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_Interrupt2_Configuration_definition - * @{ - */ -#define LSM303AGR_IT2_CLICK ((uint8_t)0x80) -#define LSM303AGR_IT2_INT1 ((uint8_t)0x40) -#define LSM303AGR_IT2_INT2 ((uint8_t)0x20) -#define LSM303AGR_IT2_BOOT ((uint8_t)0x10) -#define LSM303AGR_IT2_ACT ((uint8_t)0x08) -#define LSM303AGR_IT2_HLACTIVE ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_INT_Combination_Status - * @{ - */ -#define LSM303AGR_OR_COMBINATION ((uint8_t)0x00) /*!< OR combination of enabled IRQs */ -#define LSM303AGR_AND_COMBINATION ((uint8_t)0x80) /*!< AND combination of enabled IRQs */ -#define LSM303AGR_MOV_RECOGNITION ((uint8_t)0x40) /*!< 6D movement recognition */ -#define LSM303AGR_POS_RECOGNITION ((uint8_t)0xC0) /*!< 6D position recognition */ -/** - * @} - */ - -/** @defgroup Acc_INT_Axes - * @{ - */ -#define LSM303AGR_Z_HIGH ((uint8_t)0x20) /*!< Z High enabled IRQs */ -#define LSM303AGR_Z_LOW ((uint8_t)0x10) /*!< Z low enabled IRQs */ -#define LSM303AGR_Y_HIGH ((uint8_t)0x08) /*!< Y High enabled IRQs */ -#define LSM303AGR_Y_LOW ((uint8_t)0x04) /*!< Y low enabled IRQs */ -#define LSM303AGR_X_HIGH ((uint8_t)0x02) /*!< X High enabled IRQs */ -#define LSM303AGR_X_LOW ((uint8_t)0x01) /*!< X low enabled IRQs */ -/** - * @} - */ - -/** @defgroup Acc_INT_Click -* @{ -*/ -#define LSM303AGR_Z_DOUBLE_CLICK ((uint8_t)0x20) /*!< Z double click IRQs */ -#define LSM303AGR_Z_SINGLE_CLICK ((uint8_t)0x10) /*!< Z single click IRQs */ -#define LSM303AGR_Y_DOUBLE_CLICK ((uint8_t)0x08) /*!< Y double click IRQs */ -#define LSM303AGR_Y_SINGLE_CLICK ((uint8_t)0x04) /*!< Y single click IRQs */ -#define LSM303AGR_X_DOUBLE_CLICK ((uint8_t)0x02) /*!< X double click IRQs */ -#define LSM303AGR_X_SINGLE_CLICK ((uint8_t)0x01) /*!< X single click IRQs */ -/** -* @} -*/ - -/** @defgroup Acc_INT1_Interrupt_status - * @{ - */ -#define LSM303AGR_INT1INTERRUPT_DISABLE ((uint8_t)0x00) -#define LSM303AGR_INT1INTERRUPT_ENABLE ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Acc_INT1_Interrupt_ActiveEdge - * @{ - */ -#define LSM303AGR_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20) -#define LSM303AGR_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Mag_Data_Rate - * @{ - */ -#define LSM303AGR_ODR_0_75_HZ ((uint8_t) 0x00) /*!< Output Data Rate = 0.75 Hz */ -#define LSM303AGR_ODR_1_5_HZ ((uint8_t) 0x04) /*!< Output Data Rate = 1.5 Hz */ -#define LSM303AGR_ODR_3_0_HZ ((uint8_t) 0x08) /*!< Output Data Rate = 3 Hz */ -#define LSM303AGR_ODR_7_5_HZ ((uint8_t) 0x0C) /*!< Output Data Rate = 7.5 Hz */ -#define LSM303AGR_ODR_15_HZ ((uint8_t) 0x10) /*!< Output Data Rate = 15 Hz */ -#define LSM303AGR_ODR_30_HZ ((uint8_t) 0x14) /*!< Output Data Rate = 30 Hz */ -#define LSM303AGR_ODR_75_HZ ((uint8_t) 0x18) /*!< Output Data Rate = 75 Hz */ -#define LSM303AGR_ODR_220_HZ ((uint8_t) 0x1C) /*!< Output Data Rate = 220 Hz */ -/** - * @} - */ - -/** @defgroup Mag_Full_Scale - * @{ - */ -#define LSM303AGR_FS_1_3_GA ((uint8_t) 0x20) /*!< Full scale = ±1.3 Gauss */ -#define LSM303AGR_FS_1_9_GA ((uint8_t) 0x40) /*!< Full scale = ±1.9 Gauss */ -#define LSM303AGR_FS_2_5_GA ((uint8_t) 0x60) /*!< Full scale = ±2.5 Gauss */ -#define LSM303AGR_FS_4_0_GA ((uint8_t) 0x80) /*!< Full scale = ±4.0 Gauss */ -#define LSM303AGR_FS_4_7_GA ((uint8_t) 0xA0) /*!< Full scale = ±4.7 Gauss */ -#define LSM303AGR_FS_5_6_GA ((uint8_t) 0xC0) /*!< Full scale = ±5.6 Gauss */ -#define LSM303AGR_FS_8_1_GA ((uint8_t) 0xE0) /*!< Full scale = ±8.1 Gauss */ -/** - * @} - */ - -/** - * @defgroup Magnetometer_Sensitivity - * @{ - */ -#define LSM303AGR_M_SENSITIVITY_XY_1_3Ga 1100 /*!< magnetometer X Y axes sensitivity for 1.3 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_1_9Ga 855 /*!< magnetometer X Y axes sensitivity for 1.9 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_2_5Ga 670 /*!< magnetometer X Y axes sensitivity for 2.5 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_4Ga 450 /*!< magnetometer X Y axes sensitivity for 4 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_4_7Ga 400 /*!< magnetometer X Y axes sensitivity for 4.7 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_5_6Ga 330 /*!< magnetometer X Y axes sensitivity for 5.6 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_XY_8_1Ga 230 /*!< magnetometer X Y axes sensitivity for 8.1 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_1_3Ga 980 /*!< magnetometer Z axis sensitivity for 1.3 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_1_9Ga 760 /*!< magnetometer Z axis sensitivity for 1.9 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_2_5Ga 600 /*!< magnetometer Z axis sensitivity for 2.5 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_4Ga 400 /*!< magnetometer Z axis sensitivity for 4 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_4_7Ga 355 /*!< magnetometer Z axis sensitivity for 4.7 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_5_6Ga 295 /*!< magnetometer Z axis sensitivity for 5.6 Ga full scale [LSB/Ga] */ -#define LSM303AGR_M_SENSITIVITY_Z_8_1Ga 205 /*!< magnetometer Z axis sensitivity for 8.1 Ga full scale [LSB/Ga] */ -/** - * @} - */ - -/** @defgroup Mag_Working_Mode - * @{ - */ -#define LSM303AGR_CONTINUOS_CONVERSION ((uint8_t) 0x00) /*!< Continuous-Conversion Mode */ -#define LSM303AGR_SINGLE_CONVERSION ((uint8_t) 0x01) /*!< Single-Conversion Mode */ -#define LSM303AGR_SLEEP ((uint8_t) 0x02) /*!< Sleep Mode */ -/** - * @} - */ - -/** @defgroup Mag_Temperature_Sensor - * @{ - */ -#define LSM303AGR_TEMPSENSOR_ENABLE ((uint8_t) 0x80) /*!< Temp sensor Enable */ -#define LSM303AGR_TEMPSENSOR_DISABLE ((uint8_t) 0x00) /*!< Temp sensor Disable */ -/** - * @} - */ - -/** @defgroup LSM303AGR_Exported_Functions - * @{ - */ -/* ACC functions */ -void LSM303AGR_AccInit(uint16_t InitStruct); -void LSM303AGR_AccDeInit(void); -uint8_t LSM303AGR_AccReadID(void); -void LSM303AGR_AccRebootCmd(void); -void LSM303AGR_AccFilterConfig(uint8_t FilterStruct); -void LSM303AGR_AccFilterCmd(uint8_t HighPassFilterState); -void LSM303AGR_AccReadXYZ(int16_t* pData); -void LSM303AGR_AccFilterClickCmd(uint8_t HighPassFilterClickState); -void LSM303AGR_AccIT1Enable(uint8_t LSM303AGR_IT); -void LSM303AGR_AccIT1Disable(uint8_t LSM303AGR_IT); -void LSM303AGR_AccIT2Enable(uint8_t LSM303AGR_IT); -void LSM303AGR_AccIT2Disable(uint8_t LSM303AGR_IT); -void LSM303AGR_AccINT1InterruptEnable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303AGR_AccINT1InterruptDisable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303AGR_AccINT2InterruptEnable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303AGR_AccINT2InterruptDisable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303AGR_AccClickITEnable(uint8_t ITClick); -void LSM303AGR_AccClickITDisable(uint8_t ITClick); -void LSM303AGR_AccZClickITConfig(void); - -#if 0 -/* MAG functions */ -void LSM303AGR_MagInit(LSM303AGRMag_InitTypeDef *LSM303AGR_InitStruct); -uint8_t LSM303AGR_MagGetDataStatus(void); -void LSM303AGR_CompassReadAcc(int16_t* pData); -#endif - -/* COMPASS / ACCELERO IO functions */ -void COMPASSACCELERO_IO_Init(void); -void COMPASSACCELERO_IO_ITConfig(void); -void COMPASSACCELERO_IO_Write(uint16_t DeviceAddr, uint8_t RegisterAddr, uint8_t Value); -uint8_t COMPASSACCELERO_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr); - -/* ACC driver structure */ -extern ACCELERO_DrvTypeDef Lsm303agrDrv; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LSM303AGR_H */ diff --git a/Drivers/BSP/Components/lsm303dlhc b/Drivers/BSP/Components/lsm303dlhc new file mode 160000 index 0000000000..7fbf7aa073 --- /dev/null +++ b/Drivers/BSP/Components/lsm303dlhc @@ -0,0 +1 @@ +Subproject commit 7fbf7aa073cb1956ba86f5d979632ac483deac0a diff --git a/Drivers/BSP/Components/lsm303dlhc/LICENSE.md b/Drivers/BSP/Components/lsm303dlhc/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/lsm303dlhc/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/lsm303dlhc/Release_Notes.html b/Drivers/BSP/Components/lsm303dlhc/Release_Notes.html deleted file mode 100644 index 60d335a7c6..0000000000 --- a/Drivers/BSP/Components/lsm303dlhc/Release_Notes.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - Release Notes for LSM303DLHC Component Drivers - - - - - - -
-
-
-

Release Notes for

-

LSM303DLHC Component Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the LSM303DLHC Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • lsm303dlhc.c -
      -
    • Add accelerometer de-initialization function: LSM303DLHC_AccDeInit()
    • -
  • -
-

NOTE This release must be used with BSP Common driver V4.0.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • lsm303dlhc.h: change Ҡby “/†in the include path to fix compilation issue under Linux
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/lsm303dlhc/_htmresc/favicon.png b/Drivers/BSP/Components/lsm303dlhc/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/lsm303dlhc/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/lsm303dlhc/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/lsm303dlhc/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/lsm303dlhc/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/lsm303dlhc/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/lsm303dlhc/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/lsm303dlhc/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.c b/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.c deleted file mode 100644 index 390c0c16d0..0000000000 --- a/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.c +++ /dev/null @@ -1,557 +0,0 @@ -/** - ****************************************************************************** - * @file lsm303dlhc.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the lsm303dlhc - * MEMS accelerometer. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "lsm303dlhc.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LSM303DLHC - * @{ - */ - -/** @defgroup LSM303DLHC_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303DLHC_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303DLHC_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup LSM303DLHC_Private_Variables - * @{ - */ -ACCELERO_DrvTypeDef Lsm303dlhcDrv = -{ - LSM303DLHC_AccInit, - LSM303DLHC_AccDeInit, - LSM303DLHC_AccReadID, - LSM303DLHC_AccRebootCmd, - 0, - LSM303DLHC_AccZClickITConfig, - 0, - 0, - 0, - 0, - LSM303DLHC_AccFilterConfig, - LSM303DLHC_AccFilterCmd, - LSM303DLHC_AccReadXYZ -}; - -/** - * @} - */ - -/** @defgroup LSM303DLHC_Private_Functions - * @{ - */ - -/** - * @brief Set LSM303DLHC Initialization. - * @param InitStruct: Init parameters - * @retval None - */ -void LSM303DLHC_AccInit(uint16_t InitStruct) -{ - uint8_t ctrl = 0x00; - - /* Low level init */ - COMPASSACCELERO_IO_Init(); - - /* Write value to ACC MEMS CTRL_REG1 register */ - ctrl = (uint8_t) InitStruct; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG1_A, ctrl); - - /* Write value to ACC MEMS CTRL_REG4 register */ - ctrl = (uint8_t) (InitStruct >> 8); - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG4_A, ctrl); -} - -/** - * @brief LSM303DLHC De-initialization. - * @param None - * @retval None - */ -void LSM303DLHC_AccDeInit(void) -{ -} - -/** - * @brief Read LSM303DLHC ID. - * @param None - * @retval ID - */ -uint8_t LSM303DLHC_AccReadID(void) -{ - uint8_t ctrl = 0x00; - - /* Low level init */ - COMPASSACCELERO_IO_Init(); - - /* Read value at Who am I register address */ - ctrl = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_WHO_AM_I_ADDR); - - return ctrl; -} - -/** - * @brief Reboot memory content of LSM303DLHC - * @param None - * @retval None - */ -void LSM303DLHC_AccRebootCmd(void) -{ - uint8_t tmpreg; - - /* Read CTRL_REG5 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG5_A); - - /* Enable or Disable the reboot memory */ - tmpreg |= LSM303DLHC_BOOT_REBOOTMEMORY; - - /* Write value to ACC MEMS CTRL_REG5 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG5_A, tmpreg); -} - -/** - * @brief Set High Pass Filter Modality - * @param FilterStruct: contains data for filter config - * @retval None - */ -void LSM303DLHC_AccFilterConfig(uint8_t FilterStruct) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A); - - tmpreg &= 0x0C; - tmpreg |= FilterStruct; - - /* Write value to ACC MEMS CTRL_REG2 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Enable or Disable High Pass Filter - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: LSM303DLHC_HIGHPASSFILTER_DISABLE - * @arg: LSM303DLHC_HIGHPASSFILTER_ENABLE - * @retval None - */ -void LSM303DLHC_AccFilterCmd(uint8_t HighPassFilterState) -{ - uint8_t tmpreg; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A); - - tmpreg &= 0xF7; - - tmpreg |= HighPassFilterState; - - /* Write value to ACC MEMS CTRL_REG2 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Read X, Y & Z Acceleration values - * @param pData: Data out pointer - * @retval None - */ -void LSM303DLHC_AccReadXYZ(int16_t* pData) -{ - int16_t pnRawData[3]; - uint8_t ctrlx[2]={0,0}; - int8_t buffer[6]; - uint8_t i = 0; - uint8_t sensitivity = LSM303DLHC_ACC_SENSITIVITY_2G; - - /* Read the acceleration control register content */ - ctrlx[0] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG4_A); - ctrlx[1] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG5_A); - - /* Read output register X, Y & Z acceleration */ - buffer[0] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_X_L_A); - buffer[1] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_X_H_A); - buffer[2] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_Y_L_A); - buffer[3] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_Y_H_A); - buffer[4] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_Z_L_A); - buffer[5] = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_OUT_Z_H_A); - - /* Check in the control register4 the data alignment*/ - if(!(ctrlx[0] & LSM303DLHC_BLE_MSB)) - { - for(i=0; i<3; i++) - { - pnRawData[i]=((int16_t)((uint16_t)buffer[2*i+1] << 8) + buffer[2*i]); - } - } - else /* Big Endian Mode */ - { - for(i=0; i<3; i++) - { - pnRawData[i]=((int16_t)((uint16_t)buffer[2*i] << 8) + buffer[2*i+1]); - } - } - - /* Normal mode */ - /* Switch the sensitivity value set in the CRTL4 */ - switch(ctrlx[0] & LSM303DLHC_FULLSCALE_16G) - { - case LSM303DLHC_FULLSCALE_2G: - sensitivity = LSM303DLHC_ACC_SENSITIVITY_2G; - break; - case LSM303DLHC_FULLSCALE_4G: - sensitivity = LSM303DLHC_ACC_SENSITIVITY_4G; - break; - case LSM303DLHC_FULLSCALE_8G: - sensitivity = LSM303DLHC_ACC_SENSITIVITY_8G; - break; - case LSM303DLHC_FULLSCALE_16G: - sensitivity = LSM303DLHC_ACC_SENSITIVITY_16G; - break; - } - - /* Obtain the mg value for the three axis */ - for(i=0; i<3; i++) - { - pData[i]=(pnRawData[i] * sensitivity); - } -} - -/** - * @brief Enable or Disable High Pass Filter on CLick - * @param HighPassFilterState: new state of the High Pass Filter feature. - * This parameter can be: - * @arg: LSM303DLHC_HPF_CLICK_DISABLE - * @arg: LSM303DLHC_HPF_CLICK_ENABLE - * @retval None - */ -void LSM303DLHC_AccFilterClickCmd(uint8_t HighPassFilterClickState) -{ - uint8_t tmpreg = 0x00; - - /* Read CTRL_REG2 register */ - tmpreg = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A); - - tmpreg &= ~(LSM303DLHC_HPF_CLICK_ENABLE); - - tmpreg |= HighPassFilterClickState; - - /* Write value to ACC MEMS CTRL_REG2 regsister */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG2_A, tmpreg); -} - -/** - * @brief Enable LSM303DLHC Interrupt1 - * @param LSM303DLHC_IT: specifies the LSM303DLHC interrupt source to be enabled. - * This parameter can be any combination of the following values: - * @arg LSM303DLHC_IT1_CLICK - * @arg LSM303DLHC_IT1_AOI1 - * @arg LSM303DLHC_IT1_AOI2 - * @arg LSM303DLHC_IT1_DRY1 - * @arg LSM303DLHC_IT1_DRY2 - * @arg LSM303DLHC_IT1_WTM - * @arg LSM303DLHC_IT1_OVERRUN - * @retval None - */ -void LSM303DLHC_AccIT1Enable(uint8_t LSM303DLHC_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG3_A); - - /* Enable IT1 */ - tmpval |= LSM303DLHC_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG3_A, tmpval); -} - -/** - * @brief Disable LSM303DLHC Interrupt1 - * @param LSM303DLHC_IT: specifies the LSM303DLHC interrupt source to be disabled. - * This parameter can be any combination of the following values: - * @arg LSM303DLHC_IT1_CLICK - * @arg LSM303DLHC_IT1_AOI1 - * @arg LSM303DLHC_IT1_AOI2 - * @arg LSM303DLHC_IT1_DRY1 - * @arg LSM303DLHC_IT1_DRY2 - * @arg LSM303DLHC_IT1_WTM - * @arg LSM303DLHC_IT1_OVERRUN - * @retval None - */ -void LSM303DLHC_AccIT1Disable(uint8_t LSM303DLHC_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG3_A); - - /* Disable IT1 */ - tmpval &= ~LSM303DLHC_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG3_A, tmpval); -} - -/** - * @brief Enable LSM303DLHC Interrupt2 - * @param LSM303DLHC_IT: specifies the LSM303DLHC interrupt source to be enabled. - * This parameter can be any combination of the following values: - * @arg LSM303DLHC_IT2_CLICK - * @arg LSM303DLHC_IT2_INT1 - * @arg LSM303DLHC_IT2_INT2 - * @arg LSM303DLHC_IT2_BOOT - * @arg LSM303DLHC_IT2_ACT - * @arg LSM303DLHC_IT2_HLACTIVE - * @retval None - */ -void LSM303DLHC_AccIT2Enable(uint8_t LSM303DLHC_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG6_A); - - /* Enable IT2 */ - tmpval |= LSM303DLHC_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG6_A, tmpval); -} - -/** - * @brief Disable LSM303DLHC Interrupt2 - * @param LSM303DLHC_IT: specifies the LSM303DLHC interrupt source to be disabled. - * This parameter can be any combination of the following values: - * @arg LSM303DLHC_IT2_CLICK - * @arg LSM303DLHC_IT2_INT1 - * @arg LSM303DLHC_IT2_INT2 - * @arg LSM303DLHC_IT2_BOOT - * @arg LSM303DLHC_IT2_ACT - * @arg LSM303DLHC_IT2_HLACTIVE - * @retval None - */ -void LSM303DLHC_AccIT2Disable(uint8_t LSM303DLHC_IT) -{ - uint8_t tmpval = 0x00; - - /* Read CTRL_REG3 register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG6_A); - - /* Disable IT2 */ - tmpval &= ~LSM303DLHC_IT; - - /* Write value to MEMS CTRL_REG3 register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CTRL_REG6_A, tmpval); -} - -/** - * @brief INT1 interrupt enable - * @param ITCombination: Or or And combination - * ITAxes: Axes to be enabled - * @retval None - */ -void LSM303DLHC_AccINT1InterruptEnable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT1_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_INT1_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= (ITAxes | ITCombination); - - /* Write value to MEMS INT1_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_INT1_CFG_A, tmpval); -} - -/** - * @brief INT1 interrupt disable - * @param ITCombination: Or or And combination - * ITAxes: Axes to be enabled - * @retval None - */ -void LSM303DLHC_AccINT1InterruptDisable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT1_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_INT1_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~(ITAxes | ITCombination); - - /* Write value to MEMS INT1_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_INT1_CFG_A, tmpval); -} - -/** - * @brief INT2 interrupt enable - * @param ITCombination: Or or And combination - * ITAxes: axes to be enabled - * @retval None - */ -void LSM303DLHC_AccINT2InterruptEnable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT2_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_INT2_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= (ITAxes | ITCombination); - - /* Write value to MEMS INT2_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_INT2_CFG_A, tmpval); -} - -/** - * @brief INT2 interrupt config - * @param ITCombination: Or or And combination - * ITAxes: axes to be enabled - * @retval None - */ -void LSM303DLHC_AccINT2InterruptDisable(uint8_t ITCombination, uint8_t ITAxes) -{ - uint8_t tmpval = 0x00; - - /* Read INT2_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_INT2_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~(ITAxes | ITCombination); - - /* Write value to MEMS INT2_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_INT2_CFG_A, tmpval); -} - -/** - * @brief Click interrupt enable - * @param ITClick: the selected interrupt to enable - * @retval None - */ -void LSM303DLHC_AccClickITEnable(uint8_t ITClick) -{ - uint8_t tmpval = 0x00; - - /* Read CLICK_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CLICK_CFG_A); - - /* Enable the selected interrupt */ - tmpval |= ITClick; - - /* Write value to MEMS CLICK CFG register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CLICK_CFG_A, tmpval); - - /* Configure Click Threshold on Z axis */ - tmpval = 0x0A; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CLICK_THS_A, tmpval); - - /* Configure Time Limit */ - tmpval = 0x05; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_TIME_LIMIT_A, tmpval); - - /* Configure Latency */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_TIME_LATENCY_A, tmpval); - - /* Configure Click Window */ - tmpval = 0x32; - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_TIME_WINDOW_A, tmpval); -} - -/** - * @brief Click interrupt disable - * @param ITClick: the selected click interrupt to disable - * @retval None - */ -void LSM303DLHC_AccClickITDisable(uint8_t ITClick) -{ - uint8_t tmpval = 0x00; - - /* Read CLICK_CFR register */ - tmpval = COMPASSACCELERO_IO_Read(ACC_I2C_ADDRESS, LSM303DLHC_CLICK_CFG_A); - - /* Disable the selected interrupt */ - tmpval &= ~ITClick; - - /* Write value to MEMS CLICK_CFR register */ - COMPASSACCELERO_IO_Write(ACC_I2C_ADDRESS, LSM303DLHC_CLICK_CFG_A, tmpval); -} - -/** - * @brief Click on Z axis interrupt config - * @param None - * @retval None - */ -void LSM303DLHC_AccZClickITConfig(void) -{ - /* Configure low level IT config */ - COMPASSACCELERO_IO_ITConfig(); - - /* Select click IT as INT1 interrupt */ - LSM303DLHC_AccIT1Enable(LSM303DLHC_IT1_CLICK); - - /* Enable High pass filter for click IT */ - LSM303DLHC_AccFilterClickCmd(LSM303DLHC_HPF_CLICK_ENABLE); - - /* Enable simple click IT on Z axis, */ - LSM303DLHC_AccClickITEnable(LSM303DLHC_Z_SINGLE_CLICK); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.h b/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.h deleted file mode 100644 index 08fbf63f0a..0000000000 --- a/Drivers/BSP/Components/lsm303dlhc/lsm303dlhc.h +++ /dev/null @@ -1,477 +0,0 @@ -/** - ****************************************************************************** - * @file lsm303dlhc.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the lsm303dlhc.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __LSM303DLHC_H -#define __LSM303DLHC_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/accelero.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup LSM303DLHC - * @{ - */ - -/** @defgroup LSM303DLHC_Exported_Types - * @{ - */ - -/** - * @} - */ - -/******************************************************************************/ -/*************************** START REGISTER MAPPING **************************/ -/******************************************************************************/ -/* Exported constant IO ------------------------------------------------------*/ -#define ACC_I2C_ADDRESS 0x32 -#define MAG_I2C_ADDRESS 0x3C - -/* Acceleration Registers */ -#define LSM303DLHC_WHO_AM_I_ADDR 0x0F /* device identification register */ -#define LSM303DLHC_CTRL_REG1_A 0x20 /* Control register 1 acceleration */ -#define LSM303DLHC_CTRL_REG2_A 0x21 /* Control register 2 acceleration */ -#define LSM303DLHC_CTRL_REG3_A 0x22 /* Control register 3 acceleration */ -#define LSM303DLHC_CTRL_REG4_A 0x23 /* Control register 4 acceleration */ -#define LSM303DLHC_CTRL_REG5_A 0x24 /* Control register 5 acceleration */ -#define LSM303DLHC_CTRL_REG6_A 0x25 /* Control register 6 acceleration */ -#define LSM303DLHC_REFERENCE_A 0x26 /* Reference register acceleration */ -#define LSM303DLHC_STATUS_REG_A 0x27 /* Status register acceleration */ -#define LSM303DLHC_OUT_X_L_A 0x28 /* Output Register X acceleration */ -#define LSM303DLHC_OUT_X_H_A 0x29 /* Output Register X acceleration */ -#define LSM303DLHC_OUT_Y_L_A 0x2A /* Output Register Y acceleration */ -#define LSM303DLHC_OUT_Y_H_A 0x2B /* Output Register Y acceleration */ -#define LSM303DLHC_OUT_Z_L_A 0x2C /* Output Register Z acceleration */ -#define LSM303DLHC_OUT_Z_H_A 0x2D /* Output Register Z acceleration */ -#define LSM303DLHC_FIFO_CTRL_REG_A 0x2E /* Fifo control Register acceleration */ -#define LSM303DLHC_FIFO_SRC_REG_A 0x2F /* Fifo src Register acceleration */ - -#define LSM303DLHC_INT1_CFG_A 0x30 /* Interrupt 1 configuration Register acceleration */ -#define LSM303DLHC_INT1_SOURCE_A 0x31 /* Interrupt 1 source Register acceleration */ -#define LSM303DLHC_INT1_THS_A 0x32 /* Interrupt 1 Threshold register acceleration */ -#define LSM303DLHC_INT1_DURATION_A 0x33 /* Interrupt 1 DURATION register acceleration */ - -#define LSM303DLHC_INT2_CFG_A 0x34 /* Interrupt 2 configuration Register acceleration */ -#define LSM303DLHC_INT2_SOURCE_A 0x35 /* Interrupt 2 source Register acceleration */ -#define LSM303DLHC_INT2_THS_A 0x36 /* Interrupt 2 Threshold register acceleration */ -#define LSM303DLHC_INT2_DURATION_A 0x37 /* Interrupt 2 DURATION register acceleration */ - -#define LSM303DLHC_CLICK_CFG_A 0x38 /* Click configuration Register acceleration */ -#define LSM303DLHC_CLICK_SOURCE_A 0x39 /* Click 2 source Register acceleration */ -#define LSM303DLHC_CLICK_THS_A 0x3A /* Click 2 Threshold register acceleration */ - -#define LSM303DLHC_TIME_LIMIT_A 0x3B /* Time Limit Register acceleration */ -#define LSM303DLHC_TIME_LATENCY_A 0x3C /* Time Latency Register acceleration */ -#define LSM303DLHC_TIME_WINDOW_A 0x3D /* Time window register acceleration */ - -/* Magnetic field Registers */ -#define LSM303DLHC_CRA_REG_M 0x00 /* Control register A magnetic field */ -#define LSM303DLHC_CRB_REG_M 0x01 /* Control register B magnetic field */ -#define LSM303DLHC_MR_REG_M 0x02 /* Control register MR magnetic field */ -#define LSM303DLHC_OUT_X_H_M 0x03 /* Output Register X magnetic field */ -#define LSM303DLHC_OUT_X_L_M 0x04 /* Output Register X magnetic field */ -#define LSM303DLHC_OUT_Z_H_M 0x05 /* Output Register Z magnetic field */ -#define LSM303DLHC_OUT_Z_L_M 0x06 /* Output Register Z magnetic field */ -#define LSM303DLHC_OUT_Y_H_M 0x07 /* Output Register Y magnetic field */ -#define LSM303DLHC_OUT_Y_L_M 0x08 /* Output Register Y magnetic field */ - -#define LSM303DLHC_SR_REG_M 0x09 /* Status Register magnetic field */ -#define LSM303DLHC_IRA_REG_M 0x0A /* IRA Register magnetic field */ -#define LSM303DLHC_IRB_REG_M 0x0B /* IRB Register magnetic field */ -#define LSM303DLHC_IRC_REG_M 0x0C /* IRC Register magnetic field */ - -#define LSM303DLHC_TEMP_OUT_H_M 0x31 /* Temperature Register magnetic field */ -#define LSM303DLHC_TEMP_OUT_L_M 0x32 /* Temperature Register magnetic field */ - -/******************************************************************************/ -/**************************** END REGISTER MAPPING ***************************/ -/******************************************************************************/ - -#define I_AM_LMS303DLHC ((uint8_t)0x33) - -/** @defgroup Acc_Power_Mode_selection - * @{ - */ -#define LSM303DLHC_NORMAL_MODE ((uint8_t)0x00) -#define LSM303DLHC_LOWPOWER_MODE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Acc_OutPut_DataRate_Selection - * @{ - */ -#define LSM303DLHC_ODR_1_HZ ((uint8_t)0x10) /*!< Output Data Rate = 1 Hz */ -#define LSM303DLHC_ODR_10_HZ ((uint8_t)0x20) /*!< Output Data Rate = 10 Hz */ -#define LSM303DLHC_ODR_25_HZ ((uint8_t)0x30) /*!< Output Data Rate = 25 Hz */ -#define LSM303DLHC_ODR_50_HZ ((uint8_t)0x40) /*!< Output Data Rate = 50 Hz */ -#define LSM303DLHC_ODR_100_HZ ((uint8_t)0x50) /*!< Output Data Rate = 100 Hz */ -#define LSM303DLHC_ODR_200_HZ ((uint8_t)0x60) /*!< Output Data Rate = 200 Hz */ -#define LSM303DLHC_ODR_400_HZ ((uint8_t)0x70) /*!< Output Data Rate = 400 Hz */ -#define LSM303DLHC_ODR_1620_HZ_LP ((uint8_t)0x80) /*!< Output Data Rate = 1620 Hz only in Low Power Mode */ -#define LSM303DLHC_ODR_1344_HZ ((uint8_t)0x90) /*!< Output Data Rate = 1344 Hz in Normal mode and 5376 Hz in Low Power Mode */ -/** - * @} - */ - -/** @defgroup Acc_Axes_Selection - * @{ - */ -#define LSM303DLHC_X_ENABLE ((uint8_t)0x01) -#define LSM303DLHC_Y_ENABLE ((uint8_t)0x02) -#define LSM303DLHC_Z_ENABLE ((uint8_t)0x04) -#define LSM303DLHC_AXES_ENABLE ((uint8_t)0x07) -#define LSM303DLHC_AXES_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Acc_High_Resolution - * @{ - */ -#define LSM303DLHC_HR_ENABLE ((uint8_t)0x08) -#define LSM303DLHC_HR_DISABLE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Acc_Full_Scale_Selection - * @{ - */ -#define LSM303DLHC_FULLSCALE_2G ((uint8_t)0x00) /*!< ±2 g */ -#define LSM303DLHC_FULLSCALE_4G ((uint8_t)0x10) /*!< ±4 g */ -#define LSM303DLHC_FULLSCALE_8G ((uint8_t)0x20) /*!< ±8 g */ -#define LSM303DLHC_FULLSCALE_16G ((uint8_t)0x30) /*!< ±16 g */ -/** - * @} - */ - -/** @defgroup Acc_Full_Scale_Selection - * @{ - */ -#define LSM303DLHC_ACC_SENSITIVITY_2G ((uint8_t)1) /*!< accelerometer sensitivity with 2 g full scale [mg/LSB] */ -#define LSM303DLHC_ACC_SENSITIVITY_4G ((uint8_t)2) /*!< accelerometer sensitivity with 4 g full scale [mg/LSB] */ -#define LSM303DLHC_ACC_SENSITIVITY_8G ((uint8_t)4) /*!< accelerometer sensitivity with 8 g full scale [mg/LSB] */ -#define LSM303DLHC_ACC_SENSITIVITY_16G ((uint8_t)12) /*!< accelerometer sensitivity with 12 g full scale [mg/LSB] */ -/** - * @} - */ - -/** @defgroup Acc_Block_Data_Update - * @{ - */ -#define LSM303DLHC_BlockUpdate_Continous ((uint8_t)0x00) /*!< Continuos Update */ -#define LSM303DLHC_BlockUpdate_Single ((uint8_t)0x80) /*!< Single Update: output registers not updated until MSB and LSB reading */ -/** - * @} - */ - -/** @defgroup Acc_Endian_Data_selection - * @{ - */ -#define LSM303DLHC_BLE_LSB ((uint8_t)0x00) /*!< Little Endian: data LSB @ lower address */ -#define LSM303DLHC_BLE_MSB ((uint8_t)0x40) /*!< Big Endian: data MSB @ lower address */ -/** - * @} - */ - -/** @defgroup Acc_Boot_Mode_selection - * @{ - */ -#define LSM303DLHC_BOOT_NORMALMODE ((uint8_t)0x00) -#define LSM303DLHC_BOOT_REBOOTMEMORY ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_Mode - * @{ - */ -#define LSM303DLHC_HPM_NORMAL_MODE_RES ((uint8_t)0x00) -#define LSM303DLHC_HPM_REF_SIGNAL ((uint8_t)0x40) -#define LSM303DLHC_HPM_NORMAL_MODE ((uint8_t)0x80) -#define LSM303DLHC_HPM_AUTORESET_INT ((uint8_t)0xC0) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_CUT OFF_Frequency - * @{ - */ -#define LSM303DLHC_HPFCF_8 ((uint8_t)0x00) -#define LSM303DLHC_HPFCF_16 ((uint8_t)0x10) -#define LSM303DLHC_HPFCF_32 ((uint8_t)0x20) -#define LSM303DLHC_HPFCF_64 ((uint8_t)0x30) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_status - * @{ - */ -#define LSM303DLHC_HIGHPASSFILTER_DISABLE ((uint8_t)0x00) -#define LSM303DLHC_HIGHPASSFILTER_ENABLE ((uint8_t)0x08) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_Click_status - * @{ - */ -#define LSM303DLHC_HPF_CLICK_DISABLE ((uint8_t)0x00) -#define LSM303DLHC_HPF_CLICK_ENABLE ((uint8_t)0x04) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_AOI1_status - * @{ - */ -#define LSM303DLHC_HPF_AOI1_DISABLE ((uint8_t)0x00) -#define LSM303DLHC_HPF_AOI1_ENABLE ((uint8_t)0x01) -/** - * @} - */ - -/** @defgroup Acc_High_Pass_Filter_AOI2_status - * @{ - */ -#define LSM303DLHC_HPF_AOI2_DISABLE ((uint8_t)0x00) -#define LSM303DLHC_HPF_AOI2_ENABLE ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_Interrupt1_Configuration_definition - * @{ - */ -#define LSM303DLHC_IT1_CLICK ((uint8_t)0x80) -#define LSM303DLHC_IT1_AOI1 ((uint8_t)0x40) -#define LSM303DLHC_IT1_AOI2 ((uint8_t)0x20) -#define LSM303DLHC_IT1_DRY1 ((uint8_t)0x10) -#define LSM303DLHC_IT1_DRY2 ((uint8_t)0x08) -#define LSM303DLHC_IT1_WTM ((uint8_t)0x04) -#define LSM303DLHC_IT1_OVERRUN ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_Interrupt2_Configuration_definition - * @{ - */ -#define LSM303DLHC_IT2_CLICK ((uint8_t)0x80) -#define LSM303DLHC_IT2_INT1 ((uint8_t)0x40) -#define LSM303DLHC_IT2_INT2 ((uint8_t)0x20) -#define LSM303DLHC_IT2_BOOT ((uint8_t)0x10) -#define LSM303DLHC_IT2_ACT ((uint8_t)0x08) -#define LSM303DLHC_IT2_HLACTIVE ((uint8_t)0x02) -/** - * @} - */ - -/** @defgroup Acc_INT_Combination_Status - * @{ - */ -#define LSM303DLHC_OR_COMBINATION ((uint8_t)0x00) /*!< OR combination of enabled IRQs */ -#define LSM303DLHC_AND_COMBINATION ((uint8_t)0x80) /*!< AND combination of enabled IRQs */ -#define LSM303DLHC_MOV_RECOGNITION ((uint8_t)0x40) /*!< 6D movement recognition */ -#define LSM303DLHC_POS_RECOGNITION ((uint8_t)0xC0) /*!< 6D position recognition */ -/** - * @} - */ - -/** @defgroup Acc_INT_Axes - * @{ - */ -#define LSM303DLHC_Z_HIGH ((uint8_t)0x20) /*!< Z High enabled IRQs */ -#define LSM303DLHC_Z_LOW ((uint8_t)0x10) /*!< Z low enabled IRQs */ -#define LSM303DLHC_Y_HIGH ((uint8_t)0x08) /*!< Y High enabled IRQs */ -#define LSM303DLHC_Y_LOW ((uint8_t)0x04) /*!< Y low enabled IRQs */ -#define LSM303DLHC_X_HIGH ((uint8_t)0x02) /*!< X High enabled IRQs */ -#define LSM303DLHC_X_LOW ((uint8_t)0x01) /*!< X low enabled IRQs */ -/** - * @} - */ - -/** @defgroup Acc_INT_Click -* @{ -*/ -#define LSM303DLHC_Z_DOUBLE_CLICK ((uint8_t)0x20) /*!< Z double click IRQs */ -#define LSM303DLHC_Z_SINGLE_CLICK ((uint8_t)0x10) /*!< Z single click IRQs */ -#define LSM303DLHC_Y_DOUBLE_CLICK ((uint8_t)0x08) /*!< Y double click IRQs */ -#define LSM303DLHC_Y_SINGLE_CLICK ((uint8_t)0x04) /*!< Y single click IRQs */ -#define LSM303DLHC_X_DOUBLE_CLICK ((uint8_t)0x02) /*!< X double click IRQs */ -#define LSM303DLHC_X_SINGLE_CLICK ((uint8_t)0x01) /*!< X single click IRQs */ -/** -* @} -*/ - -/** @defgroup Acc_INT1_Interrupt_status - * @{ - */ -#define LSM303DLHC_INT1INTERRUPT_DISABLE ((uint8_t)0x00) -#define LSM303DLHC_INT1INTERRUPT_ENABLE ((uint8_t)0x80) -/** - * @} - */ - -/** @defgroup Acc_INT1_Interrupt_ActiveEdge - * @{ - */ -#define LSM303DLHC_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20) -#define LSM303DLHC_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00) -/** - * @} - */ - -/** @defgroup Mag_Data_Rate - * @{ - */ -#define LSM303DLHC_ODR_0_75_HZ ((uint8_t) 0x00) /*!< Output Data Rate = 0.75 Hz */ -#define LSM303DLHC_ODR_1_5_HZ ((uint8_t) 0x04) /*!< Output Data Rate = 1.5 Hz */ -#define LSM303DLHC_ODR_3_0_HZ ((uint8_t) 0x08) /*!< Output Data Rate = 3 Hz */ -#define LSM303DLHC_ODR_7_5_HZ ((uint8_t) 0x0C) /*!< Output Data Rate = 7.5 Hz */ -#define LSM303DLHC_ODR_15_HZ ((uint8_t) 0x10) /*!< Output Data Rate = 15 Hz */ -#define LSM303DLHC_ODR_30_HZ ((uint8_t) 0x14) /*!< Output Data Rate = 30 Hz */ -#define LSM303DLHC_ODR_75_HZ ((uint8_t) 0x18) /*!< Output Data Rate = 75 Hz */ -#define LSM303DLHC_ODR_220_HZ ((uint8_t) 0x1C) /*!< Output Data Rate = 220 Hz */ -/** - * @} - */ - -/** @defgroup Mag_Full_Scale - * @{ - */ -#define LSM303DLHC_FS_1_3_GA ((uint8_t) 0x20) /*!< Full scale = ±1.3 Gauss */ -#define LSM303DLHC_FS_1_9_GA ((uint8_t) 0x40) /*!< Full scale = ±1.9 Gauss */ -#define LSM303DLHC_FS_2_5_GA ((uint8_t) 0x60) /*!< Full scale = ±2.5 Gauss */ -#define LSM303DLHC_FS_4_0_GA ((uint8_t) 0x80) /*!< Full scale = ±4.0 Gauss */ -#define LSM303DLHC_FS_4_7_GA ((uint8_t) 0xA0) /*!< Full scale = ±4.7 Gauss */ -#define LSM303DLHC_FS_5_6_GA ((uint8_t) 0xC0) /*!< Full scale = ±5.6 Gauss */ -#define LSM303DLHC_FS_8_1_GA ((uint8_t) 0xE0) /*!< Full scale = ±8.1 Gauss */ -/** - * @} - */ - -/** - * @defgroup Magnetometer_Sensitivity - * @{ - */ -#define LSM303DLHC_M_SENSITIVITY_XY_1_3Ga 1100 /*!< magnetometer X Y axes sensitivity for 1.3 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_1_9Ga 855 /*!< magnetometer X Y axes sensitivity for 1.9 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_2_5Ga 670 /*!< magnetometer X Y axes sensitivity for 2.5 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_4Ga 450 /*!< magnetometer X Y axes sensitivity for 4 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_4_7Ga 400 /*!< magnetometer X Y axes sensitivity for 4.7 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_5_6Ga 330 /*!< magnetometer X Y axes sensitivity for 5.6 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_XY_8_1Ga 230 /*!< magnetometer X Y axes sensitivity for 8.1 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_1_3Ga 980 /*!< magnetometer Z axis sensitivity for 1.3 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_1_9Ga 760 /*!< magnetometer Z axis sensitivity for 1.9 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_2_5Ga 600 /*!< magnetometer Z axis sensitivity for 2.5 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_4Ga 400 /*!< magnetometer Z axis sensitivity for 4 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_4_7Ga 355 /*!< magnetometer Z axis sensitivity for 4.7 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_5_6Ga 295 /*!< magnetometer Z axis sensitivity for 5.6 Ga full scale [LSB/Ga] */ -#define LSM303DLHC_M_SENSITIVITY_Z_8_1Ga 205 /*!< magnetometer Z axis sensitivity for 8.1 Ga full scale [LSB/Ga] */ -/** - * @} - */ - -/** @defgroup Mag_Working_Mode - * @{ - */ -#define LSM303DLHC_CONTINUOS_CONVERSION ((uint8_t) 0x00) /*!< Continuous-Conversion Mode */ -#define LSM303DLHC_SINGLE_CONVERSION ((uint8_t) 0x01) /*!< Single-Conversion Mode */ -#define LSM303DLHC_SLEEP ((uint8_t) 0x02) /*!< Sleep Mode */ -/** - * @} - */ - -/** @defgroup Mag_Temperature_Sensor - * @{ - */ -#define LSM303DLHC_TEMPSENSOR_ENABLE ((uint8_t) 0x80) /*!< Temp sensor Enable */ -#define LSM303DLHC_TEMPSENSOR_DISABLE ((uint8_t) 0x00) /*!< Temp sensor Disable */ -/** - * @} - */ - -/** @defgroup LSM303DLHC_Exported_Functions - * @{ - */ -/* ACC functions */ -void LSM303DLHC_AccInit(uint16_t InitStruct); -void LSM303DLHC_AccDeInit(void); -uint8_t LSM303DLHC_AccReadID(void); -void LSM303DLHC_AccRebootCmd(void); -void LSM303DLHC_AccFilterConfig(uint8_t FilterStruct); -void LSM303DLHC_AccFilterCmd(uint8_t HighPassFilterState); -void LSM303DLHC_AccReadXYZ(int16_t* pData); -void LSM303DLHC_AccFilterClickCmd(uint8_t HighPassFilterClickState); -void LSM303DLHC_AccIT1Enable(uint8_t LSM303DLHC_IT); -void LSM303DLHC_AccIT1Disable(uint8_t LSM303DLHC_IT); -void LSM303DLHC_AccIT2Enable(uint8_t LSM303DLHC_IT); -void LSM303DLHC_AccIT2Disable(uint8_t LSM303DLHC_IT); -void LSM303DLHC_AccINT1InterruptEnable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303DLHC_AccINT1InterruptDisable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303DLHC_AccINT2InterruptEnable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303DLHC_AccINT2InterruptDisable(uint8_t ITCombination, uint8_t ITAxes); -void LSM303DLHC_AccClickITEnable(uint8_t ITClick); -void LSM303DLHC_AccClickITDisable(uint8_t ITClick); -void LSM303DLHC_AccZClickITConfig(void); - -/* COMPASS / ACCELERO IO functions */ -void COMPASSACCELERO_IO_Init(void); -void COMPASSACCELERO_IO_ITConfig(void); -void COMPASSACCELERO_IO_Write(uint16_t DeviceAddr, uint8_t RegisterAddr, uint8_t Value); -uint8_t COMPASSACCELERO_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr); - -/* ACC driver structure */ -extern ACCELERO_DrvTypeDef Lsm303dlhcDrv; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LSM303DLHC_H */ diff --git a/Drivers/BSP/Components/mfxstm32l152 b/Drivers/BSP/Components/mfxstm32l152 new file mode 160000 index 0000000000..d597607ed4 --- /dev/null +++ b/Drivers/BSP/Components/mfxstm32l152 @@ -0,0 +1 @@ +Subproject commit d597607ed4cfebbe2931f4422423f829b12b979d diff --git a/Drivers/BSP/Components/mfxstm32l152/LICENSE.md b/Drivers/BSP/Components/mfxstm32l152/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/mfxstm32l152/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/mfxstm32l152/Release_Notes.html b/Drivers/BSP/Components/mfxstm32l152/Release_Notes.html deleted file mode 100644 index 496f24994c..0000000000 --- a/Drivers/BSP/Components/mfxstm32l152/Release_Notes.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - Release Notes for MFXSTM32L152 Component Drivers - - - - - - -
-
-
-

Release Notes for MFXSTM32L152 Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This driver provides a set of functions needed to drive MFXSTM32L152, IO Expander component

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove useless assignment in mfxstm32l152_GetInstance() and mfxstm32l152_ReleaseInstance() functions
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add Shunt management of MFXSTM32L152 component -
      -
    • new mfxstm32l152_IDD_ConfigShuntNbLimit() and mfxstm32l152_IDD_GetShuntUsed() APIs
    • -
  • -
  • Add mfxstm32l152_WriteReg() API
  • -
-

NOTE This release must be used with BSP Common driver V4.0.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • mfxstm32l152_IO_Config(): remove unnecessary delay
  • -
  • mfxstm32l152_TS_DetectTouch(): improve TouchScreen speed
  • -
  • mfxstm32l152_IDD_Config(): add configuration of number of measure to be performed, with delay between 2 measures
  • -
-

NOTE
-This release must be used with BSP Common driver V3.0.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • Low Power management of MFXSTM32L152 component: -
      -
    • New mfxstm32l152_DeInit() and mfxstm32l152_WakeUp() API
    • -
    • mfxstm32l152_LowPower() API completed to be MFXSTM32L152 in Standby mode
    • -
  • -
-

NOTE
-This release must be used with BSP Common driver V2.2.0 or later

-
-
-
- -
-

Main Changes

-
    -
  • First official release of MFXSTM32L152 IO Expander component driver.
  • -
-

NOTE
-This release must be used with BSP Common driver V2.1.0 or later

-
-
-
-
- - - diff --git a/Drivers/BSP/Components/mfxstm32l152/_htmresc/favicon.png b/Drivers/BSP/Components/mfxstm32l152/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/mfxstm32l152/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/mfxstm32l152/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/mfxstm32l152/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/mfxstm32l152/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/mfxstm32l152/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/mfxstm32l152/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/mfxstm32l152/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c b/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c deleted file mode 100644 index a8c72054fa..0000000000 --- a/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.c +++ /dev/null @@ -1,1584 +0,0 @@ -/** - ****************************************************************************** - * @file mfxstm32l152.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the MFXSTM32L152 - * IO Expander devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "mfxstm32l152.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup MFXSTM32L152 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Types_Definitions - * @{ - */ - -/* Private define ------------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Defines - * @{ - */ -#define MFXSTM32L152_MAX_INSTANCE 3 - -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Macros - * @{ - */ - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef mfxstm32l152_ts_drv = -{ - mfxstm32l152_Init, - mfxstm32l152_ReadID, - mfxstm32l152_Reset, - - mfxstm32l152_TS_Start, - mfxstm32l152_TS_DetectTouch, - mfxstm32l152_TS_GetXY, - - mfxstm32l152_TS_EnableIT, - mfxstm32l152_TS_ClearIT, - mfxstm32l152_TS_ITStatus, - mfxstm32l152_TS_DisableIT, -}; - -/* IO driver structure initialization */ -IO_DrvTypeDef mfxstm32l152_io_drv = -{ - mfxstm32l152_Init, - mfxstm32l152_ReadID, - mfxstm32l152_Reset, - - mfxstm32l152_IO_Start, - mfxstm32l152_IO_Config, - mfxstm32l152_IO_WritePin, - mfxstm32l152_IO_ReadPin, - - mfxstm32l152_IO_EnableIT, - mfxstm32l152_IO_DisableIT, - mfxstm32l152_IO_ITStatus, - mfxstm32l152_IO_ClearIT, -}; - -/* IDD driver structure initialization */ -IDD_DrvTypeDef mfxstm32l152_idd_drv = -{ - mfxstm32l152_Init, - mfxstm32l152_DeInit, - mfxstm32l152_ReadID, - mfxstm32l152_Reset, - mfxstm32l152_LowPower, - mfxstm32l152_WakeUp, - - mfxstm32l152_IDD_Start, - mfxstm32l152_IDD_Config, - mfxstm32l152_IDD_GetValue, - - mfxstm32l152_IDD_EnableIT, - mfxstm32l152_IDD_ClearIT, - mfxstm32l152_IDD_GetITStatus, - mfxstm32l152_IDD_DisableIT, - - mfxstm32l152_Error_EnableIT, - mfxstm32l152_Error_ClearIT, - mfxstm32l152_Error_GetITStatus, - mfxstm32l152_Error_DisableIT, - mfxstm32l152_Error_ReadSrc, - mfxstm32l152_Error_ReadMsg -}; - - -/* mfxstm32l152 instances by address */ -uint8_t mfxstm32l152[MFXSTM32L152_MAX_INSTANCE] = {0}; -/** - * @} - */ - -/* Private function prototypes -----------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Function_Prototypes - * @{ - */ -static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr); -static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr); -static void mfxstm32l152_reg24_setPinValue(uint16_t DeviceAddr, uint8_t RegisterAddr, uint32_t PinPosition, uint8_t PinValue ); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Private_Functions - * @{ - */ - -/** - * @brief Initialize the mfxstm32l152 and configure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_Init(uint16_t DeviceAddr) -{ - uint8_t instance; - uint8_t empty; - - /* Check if device instance already exists */ - instance = mfxstm32l152_GetInstance(DeviceAddr); - - /* To prevent double initialization */ - if(instance == 0xFF) - { - /* Look for empty instance */ - empty = mfxstm32l152_GetInstance(0); - - if(empty < MFXSTM32L152_MAX_INSTANCE) - { - /* Register the current device instance */ - mfxstm32l152[empty] = DeviceAddr; - - /* Initialize IO BUS layer */ - MFX_IO_Init(); - } - } - - mfxstm32l152_SetIrqOutPinPolarity(DeviceAddr, MFXSTM32L152_OUT_PIN_POLARITY_HIGH); - mfxstm32l152_SetIrqOutPinType(DeviceAddr, MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL); -} - -/** - * @brief DeInitialize the mfxstm32l152 and unconfigure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_DeInit(uint16_t DeviceAddr) -{ - uint8_t instance; - - /* release existing instance */ - instance = mfxstm32l152_ReleaseInstance(DeviceAddr); - - /* De-Init only if instance was previously registered */ - if(instance != 0xFF) - { - /* De-Initialize IO BUS layer */ - MFX_IO_DeInit(); - } -} - -/** - * @brief Reset the mfxstm32l152 by Software. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_Reset(uint16_t DeviceAddr) -{ - /* Soft Reset */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, MFXSTM32L152_SWRST); - - /* Wait for a delay to ensure registers erasing */ - MFX_IO_Delay(10); -} - -/** - * @brief Put mfxstm32l152 Device in Low Power standby mode - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_LowPower(uint16_t DeviceAddr) -{ - /* Enter standby mode */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, MFXSTM32L152_STANDBY); - - /* enable wakeup pin */ - MFX_IO_EnableWakeupPin(); -} - -/** - * @brief WakeUp mfxstm32l152 from standby mode - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_WakeUp(uint16_t DeviceAddr) -{ - uint8_t instance; - - /* Check if device instance already exists */ - instance = mfxstm32l152_GetInstance(DeviceAddr); - - /* if instance does not exist, first initialize pins*/ - if(instance == 0xFF) - { - /* enable wakeup pin */ - MFX_IO_EnableWakeupPin(); - } - - /* toggle wakeup pin */ - MFX_IO_Wakeup(); -} - -/** - * @brief Read the MFXSTM32L152 IO Expander device ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device ID (two bytes). - */ -uint16_t mfxstm32l152_ReadID(uint16_t DeviceAddr) -{ - uint8_t id; - - /* Wait for a delay to ensure the state of registers */ - MFX_IO_Delay(1); - - /* Initialize IO BUS layer */ - MFX_IO_Init(); - - id = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_ID); - - /* Return the device ID value */ - return (id); -} - -/** - * @brief Read the MFXSTM32L152 device firmware version. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device FW version (two bytes). - */ -uint16_t mfxstm32l152_ReadFwVersion(uint16_t DeviceAddr) -{ - uint8_t data[2]; - - MFX_IO_ReadMultiple((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_FW_VERSION_MSB, data, sizeof(data)) ; - - /* Recompose MFX firmware value */ - return ((data[0] << 8) | data[1]); -} - -/** - * @brief Enable the interrupt mode for the selected IT source - * @param DeviceAddr: Device address on communication Bus. - * @param Source: The interrupt source to be configured, could be: - * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt - * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt - * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt - * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt - * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty - * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered - * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full - * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow - * @retval None - */ -void mfxstm32l152_EnableITSource(uint16_t DeviceAddr, uint8_t Source) -{ - uint8_t tmp = 0; - - /* Get the current value of the INT_EN register */ - tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN); - - /* Set the interrupts to be Enabled */ - tmp |= Source; - - /* Set the register */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN, tmp); -} - -/** - * @brief Disable the interrupt mode for the selected IT source - * @param DeviceAddr: Device address on communication Bus. - * @param Source: The interrupt source to be configured, could be: - * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt - * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt - * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt - * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt - * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty - * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered - * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full - * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow - * @retval None - */ -void mfxstm32l152_DisableITSource(uint16_t DeviceAddr, uint8_t Source) -{ - uint8_t tmp = 0; - - /* Get the current value of the INT_EN register */ - tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN); - - /* Set the interrupts to be Enabled */ - tmp &= ~Source; - - /* Set the register */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_SRC_EN, tmp); -} - - -/** - * @brief Returns the selected Global interrupt source pending bit value - * @param DeviceAddr: Device address on communication Bus. - * @param Source: the Global interrupt source to be checked, could be: - * @arg MFXSTM32L152_IRQ_GPIO: IO interrupt - * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt - * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt - * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt - * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty - * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered - * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full - * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow - * @retval The value of the checked Global interrupt source status. - */ -uint8_t mfxstm32l152_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source) -{ - /* Return the global IT source status (pending or not)*/ - return((MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_PENDING) & Source)); -} - -/** - * @brief Clear the selected Global interrupt pending bit(s) - * @param DeviceAddr: Device address on communication Bus. - * @param Source: the Global interrupt source to be cleared, could be any combination - * of the below values. The acknowledge signal for MFXSTM32L152_GPIOs configured in input - * with interrupt is not on this register but in IRQ_GPI_ACK1, IRQ_GPI_ACK2 registers. - * @arg MFXSTM32L152_IRQ_IDD : IDD interrupt - * @arg MFXSTM32L152_IRQ_ERROR : Error interrupt - * @arg MFXSTM32L152_IRQ_TS_DET : Touch Screen Controller Touch Detected interrupt - * @arg MFXSTM32L152_IRQ_TS_NE : Touch Screen FIFO Not Empty - * @arg MFXSTM32L152_IRQ_TS_TH : Touch Screen FIFO threshold triggered - * @arg MFXSTM32L152_IRQ_TS_FULL : Touch Screen FIFO Full - * @arg MFXSTM32L152_IRQ_TS_OVF : Touch Screen FIFO Overflow - * /\/\ IMPORTANT NOTE /\/\ must not use MFXSTM32L152_IRQ_GPIO as argument, see IRQ_GPI_ACK1 and IRQ_GPI_ACK2 registers - * @retval None - */ -void mfxstm32l152_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source) -{ - /* Write 1 to the bits that have to be cleared */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_ACK, Source); -} - -/** - * @brief Set the global interrupt Polarity of IRQ_OUT_PIN. - * @param DeviceAddr: Device address on communication Bus. - * @param Polarity: the IT mode polarity, could be one of the following values: - * @arg MFXSTM32L152_OUT_PIN_POLARITY_LOW: Interrupt output line is active Low edge - * @arg MFXSTM32L152_OUT_PIN_POLARITY_HIGH: Interrupt line output is active High edge - * @retval None - */ -void mfxstm32l152_SetIrqOutPinPolarity(uint16_t DeviceAddr, uint8_t Polarity) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT); - - /* Mask the polarity bits */ - tmp &= ~(uint8_t)0x02; - - /* Modify the Interrupt Output line configuration */ - tmp |= Polarity; - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT, tmp); - - /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */ - MFX_IO_Delay(1); - -} - -/** - * @brief Set the global interrupt Type of IRQ_OUT_PIN. - * @param DeviceAddr: Device address on communication Bus. - * @param Type: Interrupt line activity type, could be one of the following values: - * @arg MFXSTM32L152_OUT_PIN_TYPE_OPENDRAIN: Open Drain output Interrupt line - * @arg MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL: Push Pull output Interrupt line - * @retval None - */ -void mfxstm32l152_SetIrqOutPinType(uint16_t DeviceAddr, uint8_t Type) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT); - - /* Mask the type bits */ - tmp &= ~(uint8_t)0x01; - - /* Modify the Interrupt Output line configuration */ - tmp |= Type; - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_MFX_IRQ_OUT, tmp); - - /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */ - MFX_IO_Delay(1); - -} - - -/* ------------------------------------------------------------------ */ -/* ----------------------- GPIO ------------------------------------- */ -/* ------------------------------------------------------------------ */ - - -/** - * @brief Start the IO functionality used and enable the AF for selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param AF_en: 0 to disable, else enabled. - * @retval None - */ -void mfxstm32l152_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t mode; - - /* Get the current register value */ - mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL); - - /* Set the IO Functionalities to be Enabled */ - mode |= MFXSTM32L152_GPIO_EN; - - /* Enable ALTERNATE functions */ - /* AGPIO[0..3] can be either IDD or GPIO */ - /* AGPIO[4..7] can be either TS or GPIO */ - /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */ - /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */ - /* so if IDD and TS are both active it is better to let ALTERNATE off (0) */ - /* if however IDD or TS are not connected then set it on gives more GPIOs availability */ - /* remind that AGPIO are less efficient then normal GPIO (They use pooling rather then EXTI */ - if (IO_Pin > 0xFFFF) - { - mode |= MFXSTM32L152_ALTERNATE_GPIO_EN; - } - else - { - mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN; - } - - /* Write the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode); - - /* Wait for 1 ms for MFX to change IRQ_out pin config, before activate it */ - MFX_IO_Delay(1); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @param IO_Mode: The IO pin mode to configure, could be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - * @arg IO_MODE_INPUT_PU, - * @arg IO_MODE_INPUT_PD, - * @arg IO_MODE_OUTPUT_OD_PU, - * @arg IO_MODE_OUTPUT_OD_PD, - * @arg IO_MODE_OUTPUT_PP_PU, - * @arg IO_MODE_OUTPUT_PP_PD, - * @arg IO_MODE_IT_RISING_EDGE_PU - * @arg IO_MODE_IT_FALLING_EDGE_PU - * @arg IO_MODE_IT_LOW_LEVEL_PU - * @arg IO_MODE_IT_HIGH_LEVEL_PU - * @arg IO_MODE_IT_RISING_EDGE_PD - * @arg IO_MODE_IT_FALLING_EDGE_PD - * @arg IO_MODE_IT_LOW_LEVEL_PD - * @arg IO_MODE_IT_HIGH_LEVEL_PD - * @retval None - */ -uint8_t mfxstm32l152_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - uint8_t error_code = 0; - - /* Configure IO pin according to selected IO mode */ - switch(IO_Mode) - { - case IO_MODE_OFF: /* Off or analog mode */ - case IO_MODE_ANALOG: /* Off or analog mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - break; - - case IO_MODE_INPUT: /* Input mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - break; - - case IO_MODE_INPUT_PU: /* Input mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - break; - - case IO_MODE_INPUT_PD: /* Input mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - break; - - case IO_MODE_OUTPUT: /* Output mode */ - case IO_MODE_OUTPUT_PP_PD: /* Output mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_OUT); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_PUSH_PULL); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - break; - - case IO_MODE_OUTPUT_PP_PU: /* Output mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_OUT); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_PUSH_PULL); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - break; - - case IO_MODE_OUTPUT_OD_PD: /* Output mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_OUT); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_OPEN_DRAIN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - break; - - case IO_MODE_OUTPUT_OD_PU: /* Output mode */ - mfxstm32l152_IO_DisablePinIT(DeviceAddr, IO_Pin); /* first disable IT */ - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_OUT); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPO_OPEN_DRAIN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - break; - - case IO_MODE_IT_RISING_EDGE: /* Interrupt rising edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_RISING_EDGE_PU: /* Interrupt rising edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_RISING_EDGE_PD: /* Interrupt rising edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_FALLING_EDGE: /* Interrupt falling edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_FALLING_EDGE_PU: /* Interrupt falling edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_FALLING_EDGE_PD: /* Interrupt falling edge mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_EDGE); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_LOW_LEVEL: /* Low level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_LOW_LEVEL_PU: /* Low level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_LOW_LEVEL_PD: /* Low level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_LLFE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_HIGH_LEVEL: /* High level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_HIGH_LEVEL_PU: /* High level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_UP); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - case IO_MODE_IT_HIGH_LEVEL_PD: /* High level interrupt mode */ - mfxstm32l152_IO_EnableIT(DeviceAddr); - mfxstm32l152_IO_InitPin(DeviceAddr, IO_Pin, MFXSTM32L152_GPIO_DIR_IN); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_TYPE1, IO_Pin, MFXSTM32L152_GPI_WITH_PULL_RESISTOR); - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_PUPD1, IO_Pin, MFXSTM32L152_GPIO_PULL_DOWN); - mfxstm32l152_IO_SetIrqEvtMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_EVT_LEVEL); - mfxstm32l152_IO_SetIrqTypeMode(DeviceAddr, IO_Pin, MFXSTM32L152_IRQ_GPI_TYPE_HLRE); - mfxstm32l152_IO_EnablePinIT(DeviceAddr, IO_Pin); /* last to do: enable IT */ - break; - - default: - error_code = (uint8_t) IO_Mode; - break; - } - - return error_code; -} - -/** - * @brief Initialize the selected IO pin direction. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23. - * @param Direction: could be MFXSTM32L152_GPIO_DIR_IN or MFXSTM32L152_GPIO_DIR_OUT. - * @retval None - */ -void mfxstm32l152_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction) -{ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_DIR1, IO_Pin, Direction); -} - -/** - * @brief Set the global interrupt Type. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23. - * @param Evt: Interrupt line activity type, could be one of the following values: - * @arg MFXSTM32L152_IRQ_GPI_EVT_LEVEL: Interrupt line is active in level model - * @arg MFXSTM32L152_IRQ_GPI_EVT_EDGE: Interrupt line is active in edge model - * @retval None - */ -void mfxstm32l152_IO_SetIrqEvtMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Evt) -{ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_EVT1, IO_Pin, Evt); - MFX_IO_Delay(1); -} - -/** - * @brief Configure the Edge for which a transition is detectable for the - * selected pin. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23. - * @param Evt: Interrupt line activity type, could be one of the following values: - * @arg MFXSTM32L152_IRQ_GPI_TYPE_LLFE: Interrupt line is active in Low Level or Falling Edge - * @arg MFXSTM32L152_IRQ_GPI_TYPE_HLRE: Interrupt line is active in High Level or Rising Edge - * @retval None - */ -void mfxstm32l152_IO_SetIrqTypeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Type) -{ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE1, IO_Pin, Type); - MFX_IO_Delay(1); -} - -/** - * @brief When GPIO is in output mode, puts the corresponding GPO in High (1) or Low (0) level. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @param PinState: The new IO pin state. - * @retval None - */ -void mfxstm32l152_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState) -{ - /* Apply the bit value to the selected pin */ - if (PinState != 0) - { - /* Set the SET register */ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPO_SET1, IO_Pin, 1); - } - else - { - /* Set the CLEAR register */ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_GPO_CLR1, IO_Pin, 1); - } -} - -/** - * @brief Return the state of the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @retval IO pin(s) state. - */ -uint32_t mfxstm32l152_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint32_t tmp1 = 0; - uint32_t tmp2 = 0; - uint32_t tmp3 = 0; - - if(IO_Pin & 0x000000FF) - { - tmp1 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE1); - } - if(IO_Pin & 0x0000FF00) - { - tmp2 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE2); - } - if(IO_Pin & 0x00FF0000) - { - tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_GPIO_STATE3); - } - - tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16); - - return(tmp3 & IO_Pin); -} - -/** - * @brief Enable the global IO interrupt source. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_IO_EnableIT(uint16_t DeviceAddr) -{ - MFX_IO_ITConfig(); - - /* Enable global IO IT source */ - mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_GPIO); -} - -/** - * @brief Disable the global IO interrupt source. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_IO_DisableIT(uint16_t DeviceAddr) -{ - /* Disable global IO IT source */ - mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_GPIO); -} - -/** - * @brief Enable interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be enabled. This parameter could be any - * combination of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @retval None - */ -void mfxstm32l152_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1, IO_Pin, 1); -} - -/** - * @brief Disable interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be disabled. This parameter could be any - * combination of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @retval None - */ -void mfxstm32l152_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - mfxstm32l152_reg24_setPinValue(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1, IO_Pin, 0); -} - - -/** - * @brief Check the status of the selected IO interrupt pending bit - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be checked could be: - * @arg MFXSTM32L152_GPIO_PIN_x Where x can be from 0 to 23. - * @retval Status of the checked IO pin(s). - */ -uint32_t mfxstm32l152_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - /* Get the Interrupt status */ - uint8_t tmp1 = 0; - uint16_t tmp2 = 0; - uint32_t tmp3 = 0; - - if(IO_Pin & 0xFF) - { - tmp1 = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING1); - } - if(IO_Pin & 0xFFFF00) - { - tmp2 = (uint16_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2); - } - if(IO_Pin & 0xFFFF0000) - { - tmp3 = (uint32_t) MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3); - } - - tmp3 = tmp1 + (tmp2 << 8) + (tmp3 << 16); - - return(tmp3 & IO_Pin); -} - -/** - * @brief Clear the selected IO interrupt pending bit(s). It clear automatically also the general MFXSTM32L152_REG_ADR_IRQ_PENDING - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: the IO interrupt to be cleared, could be: - * @arg MFXSTM32L152_GPIO_PIN_x: Where x can be from 0 to 23. - * @retval None - */ -void mfxstm32l152_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - /* Clear the IO IT pending bit(s) by acknowledging */ - /* it cleans automatically also the Global IRQ_GPIO */ - /* normally this function is called under interrupt */ - uint8_t pin_0_7, pin_8_15, pin_16_23; - - pin_0_7 = IO_Pin & 0x0000ff; - pin_8_15 = IO_Pin >> 8; - pin_8_15 = pin_8_15 & 0x00ff; - pin_16_23 = IO_Pin >> 16; - - if (pin_0_7) - { - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK1, pin_0_7); - } - if (pin_8_15) - { - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK2, pin_8_15); - } - if (pin_16_23) - { - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_IRQ_GPI_ACK3, pin_16_23); - } -} - - -/** - * @brief Enable the AF for aGPIO. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_IO_EnableAF(uint16_t DeviceAddr) -{ - uint8_t mode; - - /* Get the current register value */ - mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL); - - /* Enable ALTERNATE functions */ - /* AGPIO[0..3] can be either IDD or GPIO */ - /* AGPIO[4..7] can be either TS or GPIO */ - /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */ - /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */ - /* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */ - /* if however IDD or TS are not connected then set it on gives more GPIOs availability */ - /* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */ - mode |= MFXSTM32L152_ALTERNATE_GPIO_EN; - - /* Write the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode); -} - -/** - * @brief Disable the AF for aGPIO. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ - void mfxstm32l152_IO_DisableAF(uint16_t DeviceAddr) -{ - uint8_t mode; - - /* Get the current register value */ - mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL); - - /* Enable ALTERNATE functions */ - /* AGPIO[0..3] can be either IDD or GPIO */ - /* AGPIO[4..7] can be either TS or GPIO */ - /* if IDD or TS are enabled no matter the value this bit GPIO are not available for those pins */ - /* however the MFX will waste some cycles to to handle these potential GPIO (pooling, etc) */ - /* so if IDD and TS are both active it is better to let ALTERNATE disabled (0) */ - /* if however IDD or TS are not connected then set it on gives more GPIOs availability */ - /* remind that AGPIO are less efficient then normal GPIO (they use pooling rather then EXTI) */ - mode &= ~MFXSTM32L152_ALTERNATE_GPIO_EN; - - /* Write the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode); - -} - - -/* ------------------------------------------------------------------ */ -/* --------------------- TOUCH SCREEN ------------------------------- */ -/* ------------------------------------------------------------------ */ - -/** - * @brief Configures the touch Screen Controller (Single point detection) - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void mfxstm32l152_TS_Start(uint16_t DeviceAddr) -{ - uint8_t mode; - - /* Get the current register value */ - mode = MFX_IO_Read(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL); - - /* Set the Functionalities to be Enabled */ - mode |= MFXSTM32L152_TS_EN; - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode); - - /* Wait for 2 ms */ - MFX_IO_Delay(2); - - /* Select 2 nF filter capacitor */ - /* Configuration: - - Touch average control : 4 samples - - Touch delay time : 500 uS - - Panel driver setting time: 500 uS - */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_SETTLING, 0x32); - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_TOUCH_DET_DELAY, 0x5); - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_AVE, 0x04); - - /* Configure the Touch FIFO threshold: single point reading */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, 0x01); - - /* Clear the FIFO memory content. */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, MFXSTM32L152_TS_CLEAR_FIFO); - - /* Touch screen control configuration : - - No window tracking index - */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_TRACK, 0x00); - - - /* Clear all the IT status pending bits if any */ - mfxstm32l152_IO_ClearIT(DeviceAddr, 0xFFFFFF); - - /* Wait for 1 ms delay */ - MFX_IO_Delay(1); -} - -/** - * @brief Return if there is touch detected or not. - * @param DeviceAddr: Device address on communication Bus. - * @retval Touch detected state. - */ -uint8_t mfxstm32l152_TS_DetectTouch(uint16_t DeviceAddr) -{ - uint8_t state; - uint8_t ret = 0; - - state = MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_STA); - state = ((state & (uint8_t)MFXSTM32L152_TS_CTRL_STATUS) == (uint8_t)MFXSTM32L152_TS_CTRL_STATUS); - - if(state > 0) - { - if(MFX_IO_Read(DeviceAddr, MFXSTM32L152_TS_FIFO_LEVEL) > 0) - { - ret = 1; - } - } - - return ret; -} - -/** - * @brief Get the touch screen X and Y positions values - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void mfxstm32l152_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - uint8_t data_xy[3]; - - MFX_IO_ReadMultiple(DeviceAddr, MFXSTM32L152_TS_XY_DATA, data_xy, sizeof(data_xy)) ; - - /* Calculate positions values */ - *X = (data_xy[1]<<4) + (data_xy[0]>>4); - *Y = (data_xy[2]<<4) + (data_xy[0]&4); - - /* Reset the FIFO memory content. */ - MFX_IO_Write(DeviceAddr, MFXSTM32L152_TS_FIFO_TH, MFXSTM32L152_TS_CLEAR_FIFO); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_TS_EnableIT(uint16_t DeviceAddr) -{ - MFX_IO_ITConfig(); - - /* Enable global TS IT source */ - mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_TS_DET); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_TS_DisableIT(uint16_t DeviceAddr) -{ - /* Disable global TS IT source */ - mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_TS_DET); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval TS interrupts status - */ -uint8_t mfxstm32l152_TS_ITStatus(uint16_t DeviceAddr) -{ - /* Return TS interrupts status */ - return(mfxstm32l152_GlobalITStatus(DeviceAddr, MFXSTM32L152_IRQ_TS)); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_TS_ClearIT(uint16_t DeviceAddr) -{ - /* Clear the global TS IT source */ - mfxstm32l152_ClearGlobalIT(DeviceAddr, MFXSTM32L152_IRQ_TS); -} - -/* ------------------------------------------------------------------ */ -/* --------------------- IDD MEASUREMENT ---------------------------- */ -/* ------------------------------------------------------------------ */ - -/** - * @brief Launch IDD current measurement - * @param DeviceAddr: Device address on communication Bus - * @retval None. - */ -void mfxstm32l152_IDD_Start(uint16_t DeviceAddr) -{ - uint8_t mode = 0; - - /* Get the current register value */ - mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL); - - /* Set the Functionalities to be enabled */ - mode |= MFXSTM32L152_IDD_CTRL_REQ; - - /* Start measurement campaign */ - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, mode); -} - -/** - * @brief Configures the IDD current measurement - * @param DeviceAddr: Device address on communication Bus. - * @param MfxIddConfig: Parameters depending on hardware config. - * @retval None - */ -void mfxstm32l152_IDD_Config(uint16_t DeviceAddr, IDD_ConfigTypeDef MfxIddConfig) -{ - uint8_t value = 0; - uint8_t mode = 0; - - /* Get the current register value */ - mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL); - - if((mode & MFXSTM32L152_IDD_EN) != MFXSTM32L152_IDD_EN) - { - /* Set the Functionalities to be enabled */ - mode |= MFXSTM32L152_IDD_EN; - - /* Set the new register value */ - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_SYS_CTRL, mode); - } - - /* Control register setting: number of shunts */ - value = ((MfxIddConfig.ShuntNbUsed << 1) & MFXSTM32L152_IDD_CTRL_SHUNT_NB); - value |= (MfxIddConfig.VrefMeasurement & MFXSTM32L152_IDD_CTRL_VREF_DIS); - value |= (MfxIddConfig.Calibration & MFXSTM32L152_IDD_CTRL_CAL_DIS); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, value); - - /* Idd pre delay configuration: unit and value*/ - value = (MfxIddConfig.PreDelayUnit & MFXSTM32L152_IDD_PREDELAY_UNIT) | - (MfxIddConfig.PreDelayValue & MFXSTM32L152_IDD_PREDELAY_VALUE); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_PRE_DELAY, value); - - /* Shunt 0 register value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.Shunt0Value >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT0_MSB, value); - value = (uint8_t) (MfxIddConfig.Shunt0Value); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT0_LSB, value); - - /* Shunt 1 register value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.Shunt1Value >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT1_MSB, value); - value = (uint8_t) (MfxIddConfig.Shunt1Value); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT1_LSB, value); - - /* Shunt 2 register value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.Shunt2Value >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT2_MSB, value); - value = (uint8_t) (MfxIddConfig.Shunt2Value); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT2_LSB, value); - - /* Shunt 3 register value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.Shunt3Value >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT3_MSB, value); - value = (uint8_t) (MfxIddConfig.Shunt3Value); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT3_LSB, value); - - /* Shunt 4 register value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.Shunt4Value >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT4_MSB, value); - value = (uint8_t) (MfxIddConfig.Shunt4Value); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT4_LSB, value); - - /* Shunt 0 stabilization delay */ - value = MfxIddConfig.Shunt0StabDelay; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH0_STABILIZATION, value); - - /* Shunt 1 stabilization delay */ - value = MfxIddConfig.Shunt1StabDelay; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH1_STABILIZATION, value); - - /* Shunt 2 stabilization delay */ - value = MfxIddConfig.Shunt2StabDelay; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH2_STABILIZATION, value); - - /* Shunt 3 stabilization delay */ - value = MfxIddConfig.Shunt3StabDelay; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH3_STABILIZATION, value); - - /* Shunt 4 stabilization delay */ - value = MfxIddConfig.Shunt4StabDelay; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SH4_STABILIZATION, value); - - /* Idd ampli gain value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.AmpliGain >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_GAIN_MSB, value); - value = (uint8_t) (MfxIddConfig.AmpliGain); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_GAIN_LSB, value); - - /* Idd VDD min value: MSB then LSB */ - value = (uint8_t) (MfxIddConfig.VddMin >> 8); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VDD_MIN_MSB, value); - value = (uint8_t) (MfxIddConfig.VddMin); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VDD_MIN_LSB, value); - - /* Idd number of measurements */ - value = MfxIddConfig.MeasureNb; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_NBR_OF_MEAS, value); - - /* Idd delta delay configuration: unit and value */ - value = (MfxIddConfig.DeltaDelayUnit & MFXSTM32L152_IDD_DELTADELAY_UNIT) | - (MfxIddConfig.DeltaDelayValue & MFXSTM32L152_IDD_DELTADELAY_VALUE); - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_MEAS_DELTA_DELAY, value); - - /* Idd number of shut on board */ - value = MfxIddConfig.ShuntNbOnBoard; - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNTS_ON_BOARD, value); -} - -/** - * @brief This function allows to modify number of shunt used for a measurement - * @param DeviceAddr: Device address on communication Bus - * @retval None. - */ -void mfxstm32l152_IDD_ConfigShuntNbLimit(uint16_t DeviceAddr, uint8_t ShuntNbLimit) -{ - uint8_t mode = 0; - - /* Get the current register value */ - mode = MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL); - - /* Clear number of shunt limit */ - mode &= ~(MFXSTM32L152_IDD_CTRL_SHUNT_NB); - - /* Clear number of shunt limit */ - mode |= ((ShuntNbLimit << 1) & MFXSTM32L152_IDD_CTRL_SHUNT_NB); - - /* Write noewx desired limit */ - MFX_IO_Write((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_CTRL, mode); -} - -/** - * @brief Get Idd current value - * @param DeviceAddr: Device address on communication Bus - * @param ReadValue: Pointer on value to be read - * @retval Idd value in 10 nA. - */ -void mfxstm32l152_IDD_GetValue(uint16_t DeviceAddr, uint32_t *ReadValue) -{ - uint8_t data[3]; - - MFX_IO_ReadMultiple((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_VALUE_MSB, data, sizeof(data)) ; - - /* Recompose Idd current value */ - *ReadValue = (data[0] << 16) | (data[1] << 8) | data[2]; - -} - -/** - * @brief Get Last shunt used for measurement - * @param DeviceAddr: Device address on communication Bus - * @retval Last shunt used - */ -uint8_t mfxstm32l152_IDD_GetShuntUsed(uint16_t DeviceAddr) -{ - return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_IDD_SHUNT_USED)); -} - -/** - * @brief Configure mfx to enable Idd interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_IDD_EnableIT(uint16_t DeviceAddr) -{ - MFX_IO_ITConfig(); - - /* Enable global IDD interrupt source */ - mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_IDD); -} - -/** - * @brief Clear Idd global interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_IDD_ClearIT(uint16_t DeviceAddr) -{ - /* Clear the global IDD interrupt source */ - mfxstm32l152_ClearGlobalIT(DeviceAddr, MFXSTM32L152_IRQ_IDD); -} - -/** - * @brief get Idd interrupt status - * @param DeviceAddr: Device address on communication Bus. - * @retval IDD interrupts status - */ -uint8_t mfxstm32l152_IDD_GetITStatus(uint16_t DeviceAddr) -{ - /* Return IDD interrupt status */ - return(mfxstm32l152_GlobalITStatus(DeviceAddr, MFXSTM32L152_IRQ_IDD)); -} - -/** - * @brief disable Idd interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void mfxstm32l152_IDD_DisableIT(uint16_t DeviceAddr) -{ - /* Disable global IDD interrupt source */ - mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_IDD); -} - - -/* ------------------------------------------------------------------ */ -/* --------------------- ERROR MANAGEMENT --------------------------- */ -/* ------------------------------------------------------------------ */ - -/** - * @brief Read Error Source. - * @param DeviceAddr: Device address on communication Bus. - * @retval Error message code with error source - */ -uint8_t mfxstm32l152_Error_ReadSrc(uint16_t DeviceAddr) -{ - /* Get the current source register value */ - return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_ERROR_SRC)); -} - -/** - * @brief Read Error Message - * @param DeviceAddr: Device address on communication Bus. - * @retval Error message code with error source - */ -uint8_t mfxstm32l152_Error_ReadMsg(uint16_t DeviceAddr) -{ - /* Get the current message register value */ - return(MFX_IO_Read((uint8_t) DeviceAddr, MFXSTM32L152_REG_ADR_ERROR_MSG)); -} - -/** - * @brief Enable Error global interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ - -void mfxstm32l152_Error_EnableIT(uint16_t DeviceAddr) -{ - MFX_IO_ITConfig(); - - /* Enable global Error interrupt source */ - mfxstm32l152_EnableITSource(DeviceAddr, MFXSTM32L152_IRQ_ERROR); -} - -/** - * @brief Clear Error global interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void mfxstm32l152_Error_ClearIT(uint16_t DeviceAddr) -{ - /* Clear the global Error interrupt source */ - mfxstm32l152_ClearGlobalIT(DeviceAddr, MFXSTM32L152_IRQ_ERROR); -} - -/** - * @brief get Error interrupt status - * @param DeviceAddr: Device address on communication Bus. - * @retval Error interrupts status - */ -uint8_t mfxstm32l152_Error_GetITStatus(uint16_t DeviceAddr) -{ - /* Return Error interrupt status */ - return(mfxstm32l152_GlobalITStatus(DeviceAddr, MFXSTM32L152_IRQ_ERROR)); -} - -/** - * @brief disable Error interrupt - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void mfxstm32l152_Error_DisableIT(uint16_t DeviceAddr) -{ - /* Disable global Error interrupt source */ - mfxstm32l152_DisableITSource(DeviceAddr, MFXSTM32L152_IRQ_ERROR); -} - -/** - * @brief FOR DEBUG ONLY - */ -uint8_t mfxstm32l152_ReadReg(uint16_t DeviceAddr, uint8_t RegAddr) -{ - /* Get the current register value */ - return(MFX_IO_Read((uint8_t) DeviceAddr, RegAddr)); -} - -void mfxstm32l152_WriteReg(uint16_t DeviceAddr, uint8_t RegAddr, uint8_t Value) -{ - /* set the current register value */ - MFX_IO_Write((uint8_t) DeviceAddr, RegAddr, Value); -} - -/* ------------------------------------------------------------------ */ -/* ----------------------- Private functions ------------------------ */ -/* ------------------------------------------------------------------ */ -/** - * @brief Check if the device instance of the selected address is already registered - * and return its index - * @param DeviceAddr: Device address on communication Bus. - * @retval Index of the device instance if registered, 0xFF if not. - */ -static uint8_t mfxstm32l152_GetInstance(uint16_t DeviceAddr) -{ - uint8_t idx; - - /* Check all the registered instances */ - for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++) - { - if(mfxstm32l152[idx] == DeviceAddr) - { - return idx; - } - } - - return 0xFF; -} - -/** - * @brief Release registered device instance - * @param DeviceAddr: Device address on communication Bus. - * @retval Index of released device instance, 0xFF if not. - */ -static uint8_t mfxstm32l152_ReleaseInstance(uint16_t DeviceAddr) -{ - uint8_t idx; - - /* Check for all the registered instances */ - for(idx = 0; idx < MFXSTM32L152_MAX_INSTANCE ; idx ++) - { - if(mfxstm32l152[idx] == DeviceAddr) - { - mfxstm32l152[idx] = 0; - return idx; - } - } - return 0xFF; -} - -/** - * @brief Internal routine - * @param DeviceAddr: Device address on communication Bus. - * @param RegisterAddr: Register Address - * @param PinPosition: Pin [0:23] - * @param PinValue: 0/1 - * @retval None - */ -void mfxstm32l152_reg24_setPinValue(uint16_t DeviceAddr, uint8_t RegisterAddr, uint32_t PinPosition, uint8_t PinValue ) -{ - uint8_t tmp = 0; - uint8_t pin_0_7, pin_8_15, pin_16_23; - - pin_0_7 = PinPosition & 0x0000ff; - pin_8_15 = PinPosition >> 8; - pin_8_15 = pin_8_15 & 0x00ff; - pin_16_23 = PinPosition >> 16; - - if (pin_0_7) - { - /* Get the current register value */ - tmp = MFX_IO_Read(DeviceAddr, RegisterAddr); - - /* Set the selected pin direction */ - if (PinValue != 0) - { - tmp |= (uint8_t)pin_0_7; - } - else - { - tmp &= ~(uint8_t)pin_0_7; - } - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, RegisterAddr, tmp); - } - - if (pin_8_15) - { - /* Get the current register value */ - tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+1); - - /* Set the selected pin direction */ - if (PinValue != 0) - { - tmp |= (uint8_t)pin_8_15; - } - else - { - tmp &= ~(uint8_t)pin_8_15; - } - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, RegisterAddr+1, tmp); - } - - if (pin_16_23) - { - /* Get the current register value */ - tmp = MFX_IO_Read(DeviceAddr, RegisterAddr+2); - - /* Set the selected pin direction */ - if (PinValue != 0) - { - tmp |= (uint8_t)pin_16_23; - } - else - { - tmp &= ~(uint8_t)pin_16_23; - } - - /* Set the new register value */ - MFX_IO_Write(DeviceAddr, RegisterAddr+2, tmp); - } -} - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.h b/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.h deleted file mode 100644 index 18ba47c317..0000000000 --- a/Drivers/BSP/Components/mfxstm32l152/mfxstm32l152.h +++ /dev/null @@ -1,648 +0,0 @@ -/** - ****************************************************************************** - * @file mfxstm32l152.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * mfxstm32l152.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MFXSTM32L152_H -#define __MFXSTM32L152_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" -#include "../Common/io.h" -#include "../Common/idd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup MFXSTM32L152 - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Exported_Types - * @{ - */ -typedef struct -{ - uint8_t SYS_CTRL; - uint8_t ERROR_SRC; - uint8_t ERROR_MSG; - uint8_t IRQ_OUT; - uint8_t IRQ_SRC_EN; - uint8_t IRQ_PENDING; - uint8_t IDD_CTRL; - uint8_t IDD_PRE_DELAY; - uint8_t IDD_SHUNT0_MSB; - uint8_t IDD_SHUNT0_LSB; - uint8_t IDD_SHUNT1_MSB; - uint8_t IDD_SHUNT1_LSB; - uint8_t IDD_SHUNT2_MSB; - uint8_t IDD_SHUNT2_LSB; - uint8_t IDD_SHUNT3_MSB; - uint8_t IDD_SHUNT3_LSB; - uint8_t IDD_SHUNT4_MSB; - uint8_t IDD_SHUNT4_LSB; - uint8_t IDD_GAIN_MSB; - uint8_t IDD_GAIN_LSB; - uint8_t IDD_VDD_MIN_MSB; - uint8_t IDD_VDD_MIN_LSB; - uint8_t IDD_VALUE_MSB; - uint8_t IDD_VALUE_MID; - uint8_t IDD_VALUE_LSB; - uint8_t IDD_CAL_OFFSET_MSB; - uint8_t IDD_CAL_OFFSET_LSB; - uint8_t IDD_SHUNT_USED; -}IDD_dbgTypeDef; - -/** - * @} - */ - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Exported_Constants - * @{ - */ - - /** - * @brief MFX COMMON defines - */ - - /** - * @brief Register address: chip IDs (R) - */ -#define MFXSTM32L152_REG_ADR_ID ((uint8_t)0x00) - /** - * @brief Register address: chip FW_VERSION (R) - */ -#define MFXSTM32L152_REG_ADR_FW_VERSION_MSB ((uint8_t)0x01) -#define MFXSTM32L152_REG_ADR_FW_VERSION_LSB ((uint8_t)0x00) - /** - * @brief Register address: System Control Register (R/W) - */ -#define MFXSTM32L152_REG_ADR_SYS_CTRL ((uint8_t)0x40) - /** - * @brief Register address: Vdd monitoring (R) - */ -#define MFXSTM32L152_REG_ADR_VDD_REF_MSB ((uint8_t)0x06) -#define MFXSTM32L152_REG_ADR_VDD_REF_LSB ((uint8_t)0x07) - /** - * @brief Register address: Error source - */ -#define MFXSTM32L152_REG_ADR_ERROR_SRC ((uint8_t)0x03) - /** - * @brief Register address: Error Message - */ -#define MFXSTM32L152_REG_ADR_ERROR_MSG ((uint8_t)0x04) - - /** - * @brief Reg Addr IRQs: to config the pin that informs Main MCU that MFX events appear - */ -#define MFXSTM32L152_REG_ADR_MFX_IRQ_OUT ((uint8_t)0x41) - /** - * @brief Reg Addr IRQs: to select the events which activate the MFXSTM32L152_IRQ_OUT signal - */ -#define MFXSTM32L152_REG_ADR_IRQ_SRC_EN ((uint8_t)0x42) - /** - * @brief Reg Addr IRQs: the Main MCU must read the IRQ_PENDING register to know the interrupt reason - */ -#define MFXSTM32L152_REG_ADR_IRQ_PENDING ((uint8_t)0x08) - /** - * @brief Reg Addr IRQs: the Main MCU must acknowledge it thanks to a writing access to the IRQ_ACK register - */ -#define MFXSTM32L152_REG_ADR_IRQ_ACK ((uint8_t)0x44) - - /** - * @brief MFXSTM32L152_REG_ADR_ID choices - */ -#define MFXSTM32L152_ID_1 ((uint8_t)0x7B) -#define MFXSTM32L152_ID_2 ((uint8_t)0x79) - - /** - * @brief MFXSTM32L152_REG_ADR_SYS_CTRL choices - */ -#define MFXSTM32L152_SWRST ((uint8_t)0x80) -#define MFXSTM32L152_STANDBY ((uint8_t)0x40) -#define MFXSTM32L152_ALTERNATE_GPIO_EN ((uint8_t)0x08) /* by the way if IDD and TS are enabled they take automatically the AF pins*/ -#define MFXSTM32L152_IDD_EN ((uint8_t)0x04) -#define MFXSTM32L152_TS_EN ((uint8_t)0x02) -#define MFXSTM32L152_GPIO_EN ((uint8_t)0x01) - - /** - * @brief MFXSTM32L152_REG_ADR_ERROR_SRC choices - */ -#define MFXSTM32L152_IDD_ERROR_SRC ((uint8_t)0x04) /* Error raised by Idd */ -#define MFXSTM32L152_TS_ERROR_SRC ((uint8_t)0x02) /* Error raised by Touch Screen */ -#define MFXSTM32L152_GPIO_ERROR_SRC ((uint8_t)0x01) /* Error raised by Gpio */ - - /** - * @brief MFXSTM32L152_REG_ADR_MFX_IRQ_OUT choices - */ -#define MFXSTM32L152_OUT_PIN_TYPE_OPENDRAIN ((uint8_t)0x00) -#define MFXSTM32L152_OUT_PIN_TYPE_PUSHPULL ((uint8_t)0x01) -#define MFXSTM32L152_OUT_PIN_POLARITY_LOW ((uint8_t)0x00) -#define MFXSTM32L152_OUT_PIN_POLARITY_HIGH ((uint8_t)0x02) - - /** - * @brief REG_ADR_IRQ_SRC_EN, REG_ADR_IRQ_PENDING & REG_ADR_IRQ_ACK choices - */ -#define MFXSTM32L152_IRQ_TS_OVF ((uint8_t)0x80) /* TouchScreen FIFO Overflow irq*/ -#define MFXSTM32L152_IRQ_TS_FULL ((uint8_t)0x40) /* TouchScreen FIFO Full irq*/ -#define MFXSTM32L152_IRQ_TS_TH ((uint8_t)0x20) /* TouchScreen FIFO threshold triggered irq*/ -#define MFXSTM32L152_IRQ_TS_NE ((uint8_t)0x10) /* TouchScreen FIFO Not Empty irq*/ -#define MFXSTM32L152_IRQ_TS_DET ((uint8_t)0x08) /* TouchScreen Detect irq*/ -#define MFXSTM32L152_IRQ_ERROR ((uint8_t)0x04) /* Error message from MFXSTM32L152 firmware irq */ -#define MFXSTM32L152_IRQ_IDD ((uint8_t)0x02) /* IDD function irq */ -#define MFXSTM32L152_IRQ_GPIO ((uint8_t)0x01) /* General GPIO irq (only for SRC_EN and PENDING) */ -#define MFXSTM32L152_IRQ_ALL ((uint8_t)0xFF) /* All global interrupts */ -#define MFXSTM32L152_IRQ_TS (MFXSTM32L152_IRQ_TS_DET | MFXSTM32L152_IRQ_TS_NE | MFXSTM32L152_IRQ_TS_TH | MFXSTM32L152_IRQ_TS_FULL | MFXSTM32L152_IRQ_TS_OVF ) - - - /** - * @brief GPIO: 24 programmable input/output called MFXSTM32L152_GPIO[23:0] are provided - */ - - /** - * @brief Reg addr: GPIO DIRECTION (R/W): GPIO pins direction: (0) input, (1) output. - */ -#define MFXSTM32L152_REG_ADR_GPIO_DIR1 ((uint8_t)0x60) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPIO_DIR2 ((uint8_t)0x61) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPIO_DIR3 ((uint8_t)0x62) /* agpio [0:7] */ - /** - * @brief Reg addr: GPIO TYPE (R/W): If GPIO in output: (0) output push pull, (1) output open drain. - * If GPIO in input: (0) input without pull resistor, (1) input with pull resistor. - */ -#define MFXSTM32L152_REG_ADR_GPIO_TYPE1 ((uint8_t)0x64) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPIO_TYPE2 ((uint8_t)0x65) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPIO_TYPE3 ((uint8_t)0x66) /* agpio [0:7] */ - /** - * @brief Reg addr: GPIO PULL_UP_PULL_DOWN (R/W): discussion open with Jean Claude - */ -#define MFXSTM32L152_REG_ADR_GPIO_PUPD1 ((uint8_t)0x68) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPIO_PUPD2 ((uint8_t)0x69) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPIO_PUPD3 ((uint8_t)0x6A) /* agpio [0:7] */ - /** - * @brief Reg addr: GPIO SET (W): When GPIO is in output mode, write (1) puts the corresponding GPO in High level. - */ -#define MFXSTM32L152_REG_ADR_GPO_SET1 ((uint8_t)0x6C) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPO_SET2 ((uint8_t)0x6D) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPO_SET3 ((uint8_t)0x6E) /* agpio [0:7] */ - /** - * @brief Reg addr: GPIO CLEAR (W): When GPIO is in output mode, write (1) puts the corresponding GPO in Low level. - */ -#define MFXSTM32L152_REG_ADR_GPO_CLR1 ((uint8_t)0x70) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPO_CLR2 ((uint8_t)0x71) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPO_CLR3 ((uint8_t)0x72) /* agpio [0:7] */ - /** - * @brief Reg addr: GPIO STATE (R): Give state of the GPIO pin. - */ -#define MFXSTM32L152_REG_ADR_GPIO_STATE1 ((uint8_t)0x10) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_GPIO_STATE2 ((uint8_t)0x11) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_GPIO_STATE3 ((uint8_t)0x12) /* agpio [0:7] */ - - /** - * @brief GPIO IRQ_GPIs - */ -/* GPIOs can INDIVIDUALLY generate interruption to the Main MCU thanks to the MFXSTM32L152_IRQ_OUT signal */ -/* the general MFXSTM32L152_IRQ_GPIO_SRC_EN shall be enabled too */ - /** - * @brief GPIO IRQ_GPI_SRC1/2/3 (R/W): registers enable or not the feature to generate irq - */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_SRC1 ((uint8_t)0x48) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_SRC2 ((uint8_t)0x49) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_SRC3 ((uint8_t)0x4A) /* agpio [0:7] */ - /** - * @brief GPIO IRQ_GPI_EVT1/2/3 (R/W): Irq generated on level (0) or edge (1). - */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_EVT1 ((uint8_t)0x4C) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_EVT2 ((uint8_t)0x4D) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_EVT3 ((uint8_t)0x4E) /* agpio [0:7] */ - /** - * @brief GPIO IRQ_GPI_TYPE1/2/3 (R/W): Irq generated on (0) : Low level or Falling edge. (1) : High level or Rising edge. - */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE1 ((uint8_t)0x50) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE2 ((uint8_t)0x51) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_TYPE3 ((uint8_t)0x52) /* agpio [0:7] */ - /** - * @brief GPIO IRQ_GPI_PENDING1/2/3 (R): irq occurs - */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING1 ((uint8_t)0x0C) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING2 ((uint8_t)0x0D) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_PENDING3 ((uint8_t)0x0E) /* agpio [0:7] */ - /** - * @brief GPIO IRQ_GPI_ACK1/2/3 (W): Write (1) to acknowledge IRQ event - */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK1 ((uint8_t)0x54) /* gpio [0:7] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK2 ((uint8_t)0x55) /* gpio [8:15] */ -#define MFXSTM32L152_REG_ADR_IRQ_GPI_ACK3 ((uint8_t)0x56) /* agpio [0:7] */ - - - /** - * @brief GPIO: IO Pins definition - */ -#define MFXSTM32L152_GPIO_PIN_0 ((uint32_t)0x0001) -#define MFXSTM32L152_GPIO_PIN_1 ((uint32_t)0x0002) -#define MFXSTM32L152_GPIO_PIN_2 ((uint32_t)0x0004) -#define MFXSTM32L152_GPIO_PIN_3 ((uint32_t)0x0008) -#define MFXSTM32L152_GPIO_PIN_4 ((uint32_t)0x0010) -#define MFXSTM32L152_GPIO_PIN_5 ((uint32_t)0x0020) -#define MFXSTM32L152_GPIO_PIN_6 ((uint32_t)0x0040) -#define MFXSTM32L152_GPIO_PIN_7 ((uint32_t)0x0080) - -#define MFXSTM32L152_GPIO_PIN_8 ((uint32_t)0x0100) -#define MFXSTM32L152_GPIO_PIN_9 ((uint32_t)0x0200) -#define MFXSTM32L152_GPIO_PIN_10 ((uint32_t)0x0400) -#define MFXSTM32L152_GPIO_PIN_11 ((uint32_t)0x0800) -#define MFXSTM32L152_GPIO_PIN_12 ((uint32_t)0x1000) -#define MFXSTM32L152_GPIO_PIN_13 ((uint32_t)0x2000) -#define MFXSTM32L152_GPIO_PIN_14 ((uint32_t)0x4000) -#define MFXSTM32L152_GPIO_PIN_15 ((uint32_t)0x8000) - -#define MFXSTM32L152_GPIO_PIN_16 ((uint32_t)0x010000) -#define MFXSTM32L152_GPIO_PIN_17 ((uint32_t)0x020000) -#define MFXSTM32L152_GPIO_PIN_18 ((uint32_t)0x040000) -#define MFXSTM32L152_GPIO_PIN_19 ((uint32_t)0x080000) -#define MFXSTM32L152_GPIO_PIN_20 ((uint32_t)0x100000) -#define MFXSTM32L152_GPIO_PIN_21 ((uint32_t)0x200000) -#define MFXSTM32L152_GPIO_PIN_22 ((uint32_t)0x400000) -#define MFXSTM32L152_GPIO_PIN_23 ((uint32_t)0x800000) - -#define MFXSTM32L152_AGPIO_PIN_0 MFXSTM32L152_GPIO_PIN_16 -#define MFXSTM32L152_AGPIO_PIN_1 MFXSTM32L152_GPIO_PIN_17 -#define MFXSTM32L152_AGPIO_PIN_2 MFXSTM32L152_GPIO_PIN_18 -#define MFXSTM32L152_AGPIO_PIN_3 MFXSTM32L152_GPIO_PIN_19 -#define MFXSTM32L152_AGPIO_PIN_4 MFXSTM32L152_GPIO_PIN_20 -#define MFXSTM32L152_AGPIO_PIN_5 MFXSTM32L152_GPIO_PIN_21 -#define MFXSTM32L152_AGPIO_PIN_6 MFXSTM32L152_GPIO_PIN_22 -#define MFXSTM32L152_AGPIO_PIN_7 MFXSTM32L152_GPIO_PIN_23 - -#define MFXSTM32L152_GPIO_PINS_ALL ((uint32_t)0xFFFFFF) - - /** - * @brief GPIO: constant - */ -#define MFXSTM32L152_GPIO_DIR_IN ((uint8_t)0x0) -#define MFXSTM32L152_GPIO_DIR_OUT ((uint8_t)0x1) -#define MFXSTM32L152_IRQ_GPI_EVT_LEVEL ((uint8_t)0x0) -#define MFXSTM32L152_IRQ_GPI_EVT_EDGE ((uint8_t)0x1) -#define MFXSTM32L152_IRQ_GPI_TYPE_LLFE ((uint8_t)0x0) /* Low Level Falling Edge */ -#define MFXSTM32L152_IRQ_GPI_TYPE_HLRE ((uint8_t)0x1) /*High Level Raising Edge */ -#define MFXSTM32L152_GPI_WITHOUT_PULL_RESISTOR ((uint8_t)0x0) -#define MFXSTM32L152_GPI_WITH_PULL_RESISTOR ((uint8_t)0x1) -#define MFXSTM32L152_GPO_PUSH_PULL ((uint8_t)0x0) -#define MFXSTM32L152_GPO_OPEN_DRAIN ((uint8_t)0x1) -#define MFXSTM32L152_GPIO_PULL_DOWN ((uint8_t)0x0) -#define MFXSTM32L152_GPIO_PULL_UP ((uint8_t)0x1) - - - /** - * @brief TOUCH SCREEN Registers - */ - - /** - * @brief Touch Screen Registers - */ -#define MFXSTM32L152_TS_SETTLING ((uint8_t)0xA0) -#define MFXSTM32L152_TS_TOUCH_DET_DELAY ((uint8_t)0xA1) -#define MFXSTM32L152_TS_AVE ((uint8_t)0xA2) -#define MFXSTM32L152_TS_TRACK ((uint8_t)0xA3) -#define MFXSTM32L152_TS_FIFO_TH ((uint8_t)0xA4) -#define MFXSTM32L152_TS_FIFO_STA ((uint8_t)0x20) -#define MFXSTM32L152_TS_FIFO_LEVEL ((uint8_t)0x21) -#define MFXSTM32L152_TS_XY_DATA ((uint8_t)0x24) - - /** - * @brief TS registers masks - */ -#define MFXSTM32L152_TS_CTRL_STATUS ((uint8_t)0x08) -#define MFXSTM32L152_TS_CLEAR_FIFO ((uint8_t)0x80) - - -/** - * @brief Register address: Idd control register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_CTRL ((uint8_t)0x80) - -/** - * @brief Register address: Idd pre delay register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_PRE_DELAY ((uint8_t)0x81) - -/** - * @brief Register address: Idd Shunt registers (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_SHUNT0_MSB ((uint8_t)0x82) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT0_LSB ((uint8_t)0x83) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT1_MSB ((uint8_t)0x84) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT1_LSB ((uint8_t)0x85) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT2_MSB ((uint8_t)0x86) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT2_LSB ((uint8_t)0x87) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT3_MSB ((uint8_t)0x88) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT3_LSB ((uint8_t)0x89) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT4_MSB ((uint8_t)0x8A) -#define MFXSTM32L152_REG_ADR_IDD_SHUNT4_LSB ((uint8_t)0x8B) - -/** - * @brief Register address: Idd ampli gain register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_GAIN_MSB ((uint8_t)0x8C) -#define MFXSTM32L152_REG_ADR_IDD_GAIN_LSB ((uint8_t)0x8D) - -/** - * @brief Register address: Idd VDD min register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_VDD_MIN_MSB ((uint8_t)0x8E) -#define MFXSTM32L152_REG_ADR_IDD_VDD_MIN_LSB ((uint8_t)0x8F) - -/** - * @brief Register address: Idd value register (R) - */ -#define MFXSTM32L152_REG_ADR_IDD_VALUE_MSB ((uint8_t)0x14) -#define MFXSTM32L152_REG_ADR_IDD_VALUE_MID ((uint8_t)0x15) -#define MFXSTM32L152_REG_ADR_IDD_VALUE_LSB ((uint8_t)0x16) - -/** - * @brief Register address: Idd calibration offset register (R) - */ -#define MFXSTM32L152_REG_ADR_IDD_CAL_OFFSET_MSB ((uint8_t)0x18) -#define MFXSTM32L152_REG_ADR_IDD_CAL_OFFSET_LSB ((uint8_t)0x19) - -/** - * @brief Register address: Idd shunt used offset register (R) - */ -#define MFXSTM32L152_REG_ADR_IDD_SHUNT_USED ((uint8_t)0x1A) - -/** - * @brief Register address: shunt stabilisation delay registers (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_SH0_STABILIZATION ((uint8_t)0x90) -#define MFXSTM32L152_REG_ADR_IDD_SH1_STABILIZATION ((uint8_t)0x91) -#define MFXSTM32L152_REG_ADR_IDD_SH2_STABILIZATION ((uint8_t)0x92) -#define MFXSTM32L152_REG_ADR_IDD_SH3_STABILIZATION ((uint8_t)0x93) -#define MFXSTM32L152_REG_ADR_IDD_SH4_STABILIZATION ((uint8_t)0x94) - -/** - * @brief Register address: Idd number of measurements register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_NBR_OF_MEAS ((uint8_t)0x96) - -/** - * @brief Register address: Idd delta delay between 2 measurements register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_MEAS_DELTA_DELAY ((uint8_t)0x97) - -/** - * @brief Register address: Idd number of shunt on board register (R/W) - */ -#define MFXSTM32L152_REG_ADR_IDD_SHUNTS_ON_BOARD ((uint8_t)0x98) - - - -/** @defgroup IDD_Control_Register_Defines IDD Control Register Defines - * @{ - */ -/** - * @brief IDD control register masks - */ -#define MFXSTM32L152_IDD_CTRL_REQ ((uint8_t)0x01) -#define MFXSTM32L152_IDD_CTRL_SHUNT_NB ((uint8_t)0x0E) -#define MFXSTM32L152_IDD_CTRL_VREF_DIS ((uint8_t)0x40) -#define MFXSTM32L152_IDD_CTRL_CAL_DIS ((uint8_t)0x80) - -/** - * @brief IDD Shunt Number - */ -#define MFXSTM32L152_IDD_SHUNT_NB_1 ((uint8_t) 0x01) -#define MFXSTM32L152_IDD_SHUNT_NB_2 ((uint8_t) 0x02) -#define MFXSTM32L152_IDD_SHUNT_NB_3 ((uint8_t) 0x03) -#define MFXSTM32L152_IDD_SHUNT_NB_4 ((uint8_t) 0x04) -#define MFXSTM32L152_IDD_SHUNT_NB_5 ((uint8_t) 0x05) - -/** - * @brief Vref Measurement - */ -#define MFXSTM32L152_IDD_VREF_AUTO_MEASUREMENT_ENABLE ((uint8_t) 0x00) -#define MFXSTM32L152_IDD_VREF_AUTO_MEASUREMENT_DISABLE ((uint8_t) 0x70) - -/** - * @brief IDD Calibration - */ -#define MFXSTM32L152_IDD_AUTO_CALIBRATION_ENABLE ((uint8_t) 0x00) -#define MFXSTM32L152_IDD_AUTO_CALIBRATION_DISABLE ((uint8_t) 0x80) -/** - * @} - */ - -/** @defgroup IDD_PreDelay_Defines IDD PreDelay Defines - * @{ - */ -/** - * @brief IDD PreDelay masks - */ -#define MFXSTM32L152_IDD_PREDELAY_UNIT ((uint8_t) 0x80) -#define MFXSTM32L152_IDD_PREDELAY_VALUE ((uint8_t) 0x7F) - - -/** - * @brief IDD PreDelay unit - */ -#define MFXSTM32L152_IDD_PREDELAY_0_5_MS ((uint8_t) 0x00) -#define MFXSTM32L152_IDD_PREDELAY_20_MS ((uint8_t) 0x80) -/** - * @} - */ - -/** @defgroup IDD_DeltaDelay_Defines IDD Delta DElay Defines - * @{ - */ -/** - * @brief IDD Delta Delay masks - */ -#define MFXSTM32L152_IDD_DELTADELAY_UNIT ((uint8_t) 0x80) -#define MFXSTM32L152_IDD_DELTADELAY_VALUE ((uint8_t) 0x7F) - - -/** - * @brief IDD Delta Delay unit - */ -#define MFXSTM32L152_IDD_DELTADELAY_0_5_MS ((uint8_t) 0x00) -#define MFXSTM32L152_IDD_DELTADELAY_20_MS ((uint8_t) 0x80) - - -/** - * @} - */ - -/** - * @} - */ - - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup MFXSTM32L152_Exported_Functions - * @{ - */ - -/** - * @brief MFXSTM32L152 Control functions - */ -void mfxstm32l152_Init(uint16_t DeviceAddr); -void mfxstm32l152_DeInit(uint16_t DeviceAddr); -void mfxstm32l152_Reset(uint16_t DeviceAddr); -uint16_t mfxstm32l152_ReadID(uint16_t DeviceAddr); -uint16_t mfxstm32l152_ReadFwVersion(uint16_t DeviceAddr); -void mfxstm32l152_LowPower(uint16_t DeviceAddr); -void mfxstm32l152_WakeUp(uint16_t DeviceAddr); - -void mfxstm32l152_EnableITSource(uint16_t DeviceAddr, uint8_t Source); -void mfxstm32l152_DisableITSource(uint16_t DeviceAddr, uint8_t Source); -uint8_t mfxstm32l152_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source); -void mfxstm32l152_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source); - -void mfxstm32l152_SetIrqOutPinPolarity(uint16_t DeviceAddr, uint8_t Polarity); -void mfxstm32l152_SetIrqOutPinType(uint16_t DeviceAddr, uint8_t Type); - - -/** - * @brief MFXSTM32L152 IO functionalities functions - */ -void mfxstm32l152_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin); -uint8_t mfxstm32l152_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode); -void mfxstm32l152_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState); -uint32_t mfxstm32l152_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin); -void mfxstm32l152_IO_EnableIT(uint16_t DeviceAddr); -void mfxstm32l152_IO_DisableIT(uint16_t DeviceAddr); -uint32_t mfxstm32l152_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin); -void mfxstm32l152_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin); - -void mfxstm32l152_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction); -void mfxstm32l152_IO_EnableAF(uint16_t DeviceAddr); -void mfxstm32l152_IO_DisableAF(uint16_t DeviceAddr); -void mfxstm32l152_IO_SetIrqTypeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Type); -void mfxstm32l152_IO_SetIrqEvtMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Evt); -void mfxstm32l152_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); -void mfxstm32l152_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); - -/** - * @brief MFXSTM32L152 Touch screen functionalities functions - */ -void mfxstm32l152_TS_Start(uint16_t DeviceAddr); -uint8_t mfxstm32l152_TS_DetectTouch(uint16_t DeviceAddr); -void mfxstm32l152_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); -void mfxstm32l152_TS_EnableIT(uint16_t DeviceAddr); -void mfxstm32l152_TS_DisableIT(uint16_t DeviceAddr); -uint8_t mfxstm32l152_TS_ITStatus (uint16_t DeviceAddr); -void mfxstm32l152_TS_ClearIT (uint16_t DeviceAddr); - -/** - * @brief MFXSTM32L152 IDD current measurement functionalities functions - */ -void mfxstm32l152_IDD_Start(uint16_t DeviceAddr); -void mfxstm32l152_IDD_Config(uint16_t DeviceAddr, IDD_ConfigTypeDef MfxIddConfig); -void mfxstm32l152_IDD_ConfigShuntNbLimit(uint16_t DeviceAddr, uint8_t ShuntNbLimit); -void mfxstm32l152_IDD_GetValue(uint16_t DeviceAddr, uint32_t *ReadValue); -uint8_t mfxstm32l152_IDD_GetShuntUsed(uint16_t DeviceAddr); -void mfxstm32l152_IDD_EnableIT(uint16_t DeviceAddr); -void mfxstm32l152_IDD_ClearIT(uint16_t DeviceAddr); -uint8_t mfxstm32l152_IDD_GetITStatus(uint16_t DeviceAddr); -void mfxstm32l152_IDD_DisableIT(uint16_t DeviceAddr); - -/** - * @brief MFXSTM32L152 Error management functions - */ -uint8_t mfxstm32l152_Error_ReadSrc(uint16_t DeviceAddr); -uint8_t mfxstm32l152_Error_ReadMsg(uint16_t DeviceAddr); -void mfxstm32l152_Error_EnableIT(uint16_t DeviceAddr); -void mfxstm32l152_Error_ClearIT(uint16_t DeviceAddr); -uint8_t mfxstm32l152_Error_GetITStatus(uint16_t DeviceAddr); -void mfxstm32l152_Error_DisableIT(uint16_t DeviceAddr); - -uint8_t mfxstm32l152_ReadReg(uint16_t DeviceAddr, uint8_t RegAddr); -void mfxstm32l152_WriteReg(uint16_t DeviceAddr, uint8_t RegAddr, uint8_t Value); - - - -/** - * @brief iobus prototypes (they should be defined in common/stm32_iobus.h) - */ -void MFX_IO_Init(void); -void MFX_IO_DeInit(void); -void MFX_IO_ITConfig (void); -void MFX_IO_EnableWakeupPin(void); -void MFX_IO_Wakeup(void); -void MFX_IO_Delay(uint32_t delay); -void MFX_IO_Write(uint16_t addr, uint8_t reg, uint8_t value); -uint8_t MFX_IO_Read(uint16_t addr, uint8_t reg); -uint16_t MFX_IO_ReadMultiple(uint16_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); - -/** - * @} - */ - -/* Touch screen driver structure */ -extern TS_DrvTypeDef mfxstm32l152_ts_drv; - -/* IO driver structure */ -extern IO_DrvTypeDef mfxstm32l152_io_drv; - -/* IDD driver structure */ -extern IDD_DrvTypeDef mfxstm32l152_idd_drv; - - -#ifdef __cplusplus -} -#endif -#endif /* __MFXSTM32L152_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/n25q128a b/Drivers/BSP/Components/n25q128a new file mode 160000 index 0000000000..d85e41b6c5 --- /dev/null +++ b/Drivers/BSP/Components/n25q128a @@ -0,0 +1 @@ +Subproject commit d85e41b6c5a2b7f135c74579e6ce942b020eda12 diff --git a/Drivers/BSP/Components/n25q128a/LICENSE.md b/Drivers/BSP/Components/n25q128a/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/n25q128a/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q128a/Release_Notes.html b/Drivers/BSP/Components/n25q128a/Release_Notes.html deleted file mode 100644 index ca562874db..0000000000 --- a/Drivers/BSP/Components/n25q128a/Release_Notes.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - Release Notes for N25Q128A Component Drivers - - - - - - -
-
-
-

Release Notes for

-

N25Q128A Component Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the N25Q128A Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of N25Q128A QuadSPI Flash Component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/n25q128a/_htmresc/favicon.png b/Drivers/BSP/Components/n25q128a/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/n25q128a/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q128a/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/n25q128a/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/n25q128a/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q128a/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/n25q128a/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/n25q128a/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q128a/n25q128a.h b/Drivers/BSP/Components/n25q128a/n25q128a.h deleted file mode 100644 index 474dae28fe..0000000000 --- a/Drivers/BSP/Components/n25q128a/n25q128a.h +++ /dev/null @@ -1,198 +0,0 @@ -/** - ****************************************************************************** - * @file n25q128a.h - * @author MCD Application Team - * @brief This file contains all the description of the N25Q128A QSPI memory. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __N25Q128A_H -#define __N25Q128A_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup n25q128a - * @{ - */ - -/** @defgroup N25Q128A_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup N25Q128A_Exported_Constants - * @{ - */ - -/** - * @brief N25Q128A Configuration - */ -#define N25Q128A_FLASH_SIZE 0x1000000 /* 128 MBits => 16MBytes */ -#define N25Q128A_SECTOR_SIZE 0x10000 /* 256 sectors of 64KBytes */ -#define N25Q128A_SUBSECTOR_SIZE 0x1000 /* 4096 subsectors of 4kBytes */ -#define N25Q128A_PAGE_SIZE 0x100 /* 65536 pages of 256 bytes */ - -#define N25Q128A_DUMMY_CYCLES_READ 8 -#define N25Q128A_DUMMY_CYCLES_READ_QUAD 10 - -#define N25Q128A_BULK_ERASE_MAX_TIME 250000 -#define N25Q128A_SECTOR_ERASE_MAX_TIME 3000 -#define N25Q128A_SUBSECTOR_ERASE_MAX_TIME 800 - -/** - * @brief N25Q128A Commands - */ -/* Reset Operations */ -#define RESET_ENABLE_CMD 0x66 -#define RESET_MEMORY_CMD 0x99 - -/* Identification Operations */ -#define READ_ID_CMD 0x9E -#define READ_ID_CMD2 0x9F -#define MULTIPLE_IO_READ_ID_CMD 0xAF -#define READ_SERIAL_FLASH_DISCO_PARAM_CMD 0x5A - -/* Read Operations */ -#define READ_CMD 0x03 -#define FAST_READ_CMD 0x0B -#define DUAL_OUT_FAST_READ_CMD 0x3B -#define DUAL_INOUT_FAST_READ_CMD 0xBB -#define QUAD_OUT_FAST_READ_CMD 0x6B -#define QUAD_INOUT_FAST_READ_CMD 0xEB - -/* Write Operations */ -#define WRITE_ENABLE_CMD 0x06 -#define WRITE_DISABLE_CMD 0x04 - -/* Register Operations */ -#define READ_STATUS_REG_CMD 0x05 -#define WRITE_STATUS_REG_CMD 0x01 - -#define READ_LOCK_REG_CMD 0xE8 -#define WRITE_LOCK_REG_CMD 0xE5 - -#define READ_FLAG_STATUS_REG_CMD 0x70 -#define CLEAR_FLAG_STATUS_REG_CMD 0x50 - -#define READ_NONVOL_CFG_REG_CMD 0xB5 -#define WRITE_NONVOL_CFG_REG_CMD 0xB1 - -#define READ_VOL_CFG_REG_CMD 0x85 -#define WRITE_VOL_CFG_REG_CMD 0x81 - -#define READ_ENHANCED_VOL_CFG_REG_CMD 0x65 -#define WRITE_ENHANCED_VOL_CFG_REG_CMD 0x61 - -/* Program Operations */ -#define PAGE_PROG_CMD 0x02 -#define DUAL_IN_FAST_PROG_CMD 0xA2 -#define EXT_DUAL_IN_FAST_PROG_CMD 0xD2 -#define QUAD_IN_FAST_PROG_CMD 0x32 -#define EXT_QUAD_IN_FAST_PROG_CMD 0x12 - -/* Erase Operations */ -#define SUBSECTOR_ERASE_CMD 0x20 -#define SECTOR_ERASE_CMD 0xD8 -#define BULK_ERASE_CMD 0xC7 - -#define PROG_ERASE_RESUME_CMD 0x7A -#define PROG_ERASE_SUSPEND_CMD 0x75 - -/* One-Time Programmable Operations */ -#define READ_OTP_ARRAY_CMD 0x4B -#define PROG_OTP_ARRAY_CMD 0x42 - -/** - * @brief N25Q128A Registers - */ -/* Status Register */ -#define N25Q128A_SR_WIP ((uint8_t)0x01) /*!< Write in progress */ -#define N25Q128A_SR_WREN ((uint8_t)0x02) /*!< Write enable latch */ -#define N25Q128A_SR_BLOCKPR ((uint8_t)0x5C) /*!< Block protected against program and erase operations */ -#define N25Q128A_SR_PRBOTTOM ((uint8_t)0x20) /*!< Protected memory area defined by BLOCKPR starts from top or bottom */ -#define N25Q128A_SR_SRWREN ((uint8_t)0x80) /*!< Status register write enable/disable */ - -/* Nonvolatile Configuration Register */ -#define N25Q128A_NVCR_LOCK ((uint16_t)0x0001) /*!< Lock nonvolatile configuration register */ -#define N25Q128A_NVCR_DUAL ((uint16_t)0x0004) /*!< Dual I/O protocol */ -#define N25Q128A_NVCR_QUAB ((uint16_t)0x0008) /*!< Quad I/O protocol */ -#define N25Q128A_NVCR_RH ((uint16_t)0x0010) /*!< Reset/hold */ -#define N25Q128A_NVCR_ODS ((uint16_t)0x01C0) /*!< Output driver strength */ -#define N25Q128A_NVCR_XIP ((uint16_t)0x0E00) /*!< XIP mode at power-on reset */ -#define N25Q128A_NVCR_NB_DUMMY ((uint16_t)0xF000) /*!< Number of dummy clock cycles */ - -/* Volatile Configuration Register */ -#define N25Q128A_VCR_WRAP ((uint8_t)0x03) /*!< Wrap */ -#define N25Q128A_VCR_XIP ((uint8_t)0x08) /*!< XIP */ -#define N25Q128A_VCR_NB_DUMMY ((uint8_t)0xF0) /*!< Number of dummy clock cycles */ - -/* Enhanced Volatile Configuration Register */ -#define N25Q128A_EVCR_ODS ((uint8_t)0x07) /*!< Output driver strength */ -#define N25Q128A_EVCR_VPPA ((uint8_t)0x08) /*!< Vpp accelerator */ -#define N25Q128A_EVCR_RH ((uint8_t)0x10) /*!< Reset/hold */ -#define N25Q128A_EVCR_DUAL ((uint8_t)0x40) /*!< Dual I/O protocol */ -#define N25Q128A_EVCR_QUAD ((uint8_t)0x80) /*!< Quad I/O protocol */ - -/* Flag Status Register */ -#define N25Q128A_FSR_PRERR ((uint8_t)0x02) /*!< Protection error */ -#define N25Q128A_FSR_PGSUS ((uint8_t)0x04) /*!< Program operation suspended */ -#define N25Q128A_FSR_VPPERR ((uint8_t)0x08) /*!< Invalid voltage during program or erase */ -#define N25Q128A_FSR_PGERR ((uint8_t)0x10) /*!< Program error */ -#define N25Q128A_FSR_ERERR ((uint8_t)0x20) /*!< Erase error */ -#define N25Q128A_FSR_ERSUS ((uint8_t)0x40) /*!< Erase operation suspended */ -#define N25Q128A_FSR_READY ((uint8_t)0x80) /*!< Ready or command in progress */ - -/** - * @} - */ - -/** @defgroup N25Q128A_Exported_Functions - * @{ - */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __N25Q128A_H */ diff --git a/Drivers/BSP/Components/n25q256a b/Drivers/BSP/Components/n25q256a new file mode 160000 index 0000000000..72faf28dd2 --- /dev/null +++ b/Drivers/BSP/Components/n25q256a @@ -0,0 +1 @@ +Subproject commit 72faf28dd24f83cc8e51b2a860df965f8fabdaca diff --git a/Drivers/BSP/Components/n25q256a/LICENSE.md b/Drivers/BSP/Components/n25q256a/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/n25q256a/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q256a/Release_Notes.html b/Drivers/BSP/Components/n25q256a/Release_Notes.html deleted file mode 100644 index dd7400e410..0000000000 --- a/Drivers/BSP/Components/n25q256a/Release_Notes.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - Release Notes for N25Q256A Component Drivers - - - - - - -
-
-
-

Release Notes for

-

N25Q256A Component Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the N25Q256A Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/n25q256a/_htmresc/favicon.png b/Drivers/BSP/Components/n25q256a/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/n25q256a/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q256a/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/n25q256a/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/n25q256a/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q256a/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/n25q256a/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/n25q256a/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q256a/n25q256a.h b/Drivers/BSP/Components/n25q256a/n25q256a.h deleted file mode 100644 index 36d5ccfc38..0000000000 --- a/Drivers/BSP/Components/n25q256a/n25q256a.h +++ /dev/null @@ -1,240 +0,0 @@ -/** - ****************************************************************************** - * @file n25q256a.h - * @author MCD Application Team - * @brief This file contains all the description of the N25Q256A QSPI memory. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __N25Q256A_H -#define __N25Q256A_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup n25q256a - * @{ - */ - -/** @defgroup N25Q256A_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup N25Q256A_Exported_Constants - * @{ - */ - -/** - * @brief N25Q256A Configuration - */ -#define N25Q256A_FLASH_SIZE 0x2000000 /* 256 MBits => 32MBytes */ -#define N25Q256A_SECTOR_SIZE 0x10000 /* 512 sectors of 64KBytes */ -#define N25Q256A_SUBSECTOR_SIZE 0x1000 /* 8192 subsectors of 4kBytes */ -#define N25Q256A_PAGE_SIZE 0x100 /* 131072 pages of 256 bytes */ - -#define N25Q256A_DUMMY_CYCLES_READ 8 -#define N25Q256A_DUMMY_CYCLES_READ_QUAD 10 -#define N25Q256A_DUMMY_CYCLES_READ_DTR 6 -#define N25Q256A_DUMMY_CYCLES_READ_QUAD_DTR 8 - -#define N25Q256A_BULK_ERASE_MAX_TIME 480000 -#define N25Q256A_SECTOR_ERASE_MAX_TIME 3000 -#define N25Q256A_SUBSECTOR_ERASE_MAX_TIME 800 - -/** - * @brief N25Q256A Commands - */ -/* Reset Operations */ -#define RESET_ENABLE_CMD 0x66 -#define RESET_MEMORY_CMD 0x99 - -/* Identification Operations */ -#define READ_ID_CMD 0x9E -#define READ_ID_CMD2 0x9F -#define MULTIPLE_IO_READ_ID_CMD 0xAF -#define READ_SERIAL_FLASH_DISCO_PARAM_CMD 0x5A - -/* Read Operations */ -#define READ_CMD 0x03 -#define READ_4_BYTE_ADDR_CMD 0x13 - -#define FAST_READ_CMD 0x0B -#define FAST_READ_DTR_CMD 0x0D -#define FAST_READ_4_BYTE_ADDR_CMD 0x0C - -#define DUAL_OUT_FAST_READ_CMD 0x3B -#define DUAL_OUT_FAST_READ_DTR_CMD 0x3D -#define DUAL_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x3C - -#define DUAL_INOUT_FAST_READ_CMD 0xBB -#define DUAL_INOUT_FAST_READ_DTR_CMD 0xBD -#define DUAL_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xBC - -#define QUAD_OUT_FAST_READ_CMD 0x6B -#define QUAD_OUT_FAST_READ_DTR_CMD 0x6D -#define QUAD_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x6C - -#define QUAD_INOUT_FAST_READ_CMD 0xEB -#define QUAD_INOUT_FAST_READ_DTR_CMD 0xED -#define QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xEC - -/* Write Operations */ -#define WRITE_ENABLE_CMD 0x06 -#define WRITE_DISABLE_CMD 0x04 - -/* Register Operations */ -#define READ_STATUS_REG_CMD 0x05 -#define WRITE_STATUS_REG_CMD 0x01 - -#define READ_LOCK_REG_CMD 0xE8 -#define WRITE_LOCK_REG_CMD 0xE5 - -#define READ_FLAG_STATUS_REG_CMD 0x70 -#define CLEAR_FLAG_STATUS_REG_CMD 0x50 - -#define READ_NONVOL_CFG_REG_CMD 0xB5 -#define WRITE_NONVOL_CFG_REG_CMD 0xB1 - -#define READ_VOL_CFG_REG_CMD 0x85 -#define WRITE_VOL_CFG_REG_CMD 0x81 - -#define READ_ENHANCED_VOL_CFG_REG_CMD 0x65 -#define WRITE_ENHANCED_VOL_CFG_REG_CMD 0x61 - -#define READ_EXT_ADDR_REG_CMD 0xC8 -#define WRITE_EXT_ADDR_REG_CMD 0xC5 - -/* Program Operations */ -#define PAGE_PROG_CMD 0x02 -#define PAGE_PROG_4_BYTE_ADDR_CMD 0x12 - -#define DUAL_IN_FAST_PROG_CMD 0xA2 -#define EXT_DUAL_IN_FAST_PROG_CMD 0xD2 - -#define QUAD_IN_FAST_PROG_CMD 0x32 -#define EXT_QUAD_IN_FAST_PROG_CMD 0x12 /*0x38*/ -#define QUAD_IN_FAST_PROG_4_BYTE_ADDR_CMD 0x34 - -/* Erase Operations */ -#define SUBSECTOR_ERASE_CMD 0x20 -#define SUBSECTOR_ERASE_4_BYTE_ADDR_CMD 0x21 - -#define SECTOR_ERASE_CMD 0xD8 -#define SECTOR_ERASE_4_BYTE_ADDR_CMD 0xDC - -#define BULK_ERASE_CMD 0xC7 - -#define PROG_ERASE_RESUME_CMD 0x7A -#define PROG_ERASE_SUSPEND_CMD 0x75 - -/* One-Time Programmable Operations */ -#define READ_OTP_ARRAY_CMD 0x4B -#define PROG_OTP_ARRAY_CMD 0x42 - -/* 4-byte Address Mode Operations */ -#define ENTER_4_BYTE_ADDR_MODE_CMD 0xB7 -#define EXIT_4_BYTE_ADDR_MODE_CMD 0xE9 - -/* Quad Operations */ -#define ENTER_QUAD_CMD 0x35 -#define EXIT_QUAD_CMD 0xF5 - -/** - * @brief N25Q256A Registers - */ -/* Status Register */ -#define N25Q256A_SR_WIP ((uint8_t)0x01) /*!< Write in progress */ -#define N25Q256A_SR_WREN ((uint8_t)0x02) /*!< Write enable latch */ -#define N25Q256A_SR_BLOCKPR ((uint8_t)0x5C) /*!< Block protected against program and erase operations */ -#define N25Q256A_SR_PRBOTTOM ((uint8_t)0x20) /*!< Protected memory area defined by BLOCKPR starts from top or bottom */ -#define N25Q256A_SR_SRWREN ((uint8_t)0x80) /*!< Status register write enable/disable */ - -/* Nonvolatile Configuration Register */ -#define N25Q256A_NVCR_NBADDR ((uint16_t)0x0001) /*!< 3-bytes or 4-bytes addressing */ -#define N25Q256A_NVCR_SEGMENT ((uint16_t)0x0002) /*!< Upper or lower 128Mb segment selected by default */ -#define N25Q256A_NVCR_DUAL ((uint16_t)0x0004) /*!< Dual I/O protocol */ -#define N25Q256A_NVCR_QUAB ((uint16_t)0x0008) /*!< Quad I/O protocol */ -#define N25Q256A_NVCR_RH ((uint16_t)0x0010) /*!< Reset/hold */ -#define N25Q256A_NVCR_ODS ((uint16_t)0x01C0) /*!< Output driver strength */ -#define N25Q256A_NVCR_XIP ((uint16_t)0x0E00) /*!< XIP mode at power-on reset */ -#define N25Q256A_NVCR_NB_DUMMY ((uint16_t)0xF000) /*!< Number of dummy clock cycles */ - -/* Volatile Configuration Register */ -#define N25Q256A_VCR_WRAP ((uint8_t)0x03) /*!< Wrap */ -#define N25Q256A_VCR_XIP ((uint8_t)0x08) /*!< XIP */ -#define N25Q256A_VCR_NB_DUMMY ((uint8_t)0xF0) /*!< Number of dummy clock cycles */ - -/* Extended Address Register */ -#define N25Q256A_EAR_A24 ((uint8_t)0x01) /*!< Select the lower or upper 128Mb segment */ - -/* Enhanced Volatile Configuration Register */ -#define N25Q256A_EVCR_ODS ((uint8_t)0x07) /*!< Output driver strength */ -#define N25Q256A_EVCR_VPPA ((uint8_t)0x08) /*!< Vpp accelerator */ -#define N25Q256A_EVCR_RH ((uint8_t)0x10) /*!< Reset/hold */ -#define N25Q256A_EVCR_DUAL ((uint8_t)0x40) /*!< Dual I/O protocol */ -#define N25Q256A_EVCR_QUAD ((uint8_t)0x80) /*!< Quad I/O protocol */ - -/* Flag Status Register */ -#define N25Q256A_FSR_NBADDR ((uint8_t)0x01) /*!< 3-bytes or 4-bytes addressing */ -#define N25Q256A_FSR_PRERR ((uint8_t)0x02) /*!< Protection error */ -#define N25Q256A_FSR_PGSUS ((uint8_t)0x04) /*!< Program operation suspended */ -#define N25Q256A_FSR_VPPERR ((uint8_t)0x08) /*!< Invalid voltage during program or erase */ -#define N25Q256A_FSR_PGERR ((uint8_t)0x10) /*!< Program error */ -#define N25Q256A_FSR_ERERR ((uint8_t)0x20) /*!< Erase error */ -#define N25Q256A_FSR_ERSUS ((uint8_t)0x40) /*!< Erase operation suspended */ -#define N25Q256A_FSR_READY ((uint8_t)0x80) /*!< Ready or command in progress */ - -/** - * @} - */ - -/** @defgroup N25Q256A_Exported_Functions - * @{ - */ -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __N25Q256A_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/n25q512a b/Drivers/BSP/Components/n25q512a new file mode 160000 index 0000000000..2f09eb1125 --- /dev/null +++ b/Drivers/BSP/Components/n25q512a @@ -0,0 +1 @@ +Subproject commit 2f09eb1125781cb1a4d364b2305da74b1b05a196 diff --git a/Drivers/BSP/Components/n25q512a/LICENSE.md b/Drivers/BSP/Components/n25q512a/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/n25q512a/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q512a/Release_Notes.html b/Drivers/BSP/Components/n25q512a/Release_Notes.html deleted file mode 100644 index 72d1a715fb..0000000000 --- a/Drivers/BSP/Components/n25q512a/Release_Notes.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Release Notes for N25Q512A Component Driver - - - - - - -
-
-
-

Release Notes for

-

N25Q512A Component Driver

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the N25Q512A Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release N25Q512A QSPI component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/n25q512a/_htmresc/favicon.png b/Drivers/BSP/Components/n25q512a/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/n25q512a/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q512a/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/n25q512a/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/n25q512a/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/n25q512a/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/n25q512a/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/n25q512a/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/n25q512a/n25q512a.h b/Drivers/BSP/Components/n25q512a/n25q512a.h deleted file mode 100644 index b1db37e531..0000000000 --- a/Drivers/BSP/Components/n25q512a/n25q512a.h +++ /dev/null @@ -1,240 +0,0 @@ -/** - ****************************************************************************** - * @file n25q512a.h - * @author MCD Application Team - * @brief This file contains all the description of the N25Q512A QSPI memory. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __N25Q512A_H -#define __N25Q512A_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup n25q512a - * @{ - */ - -/** @defgroup N25Q512A_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup N25Q512A_Exported_Constants - * @{ - */ - -/** - * @brief N25Q512A Configuration - */ -#define N25Q512A_FLASH_SIZE 0x4000000 /* 512 MBits => 64MBytes */ -#define N25Q512A_SECTOR_SIZE 0x10000 /* 1024 sectors of 64KBytes */ -#define N25Q512A_SUBSECTOR_SIZE 0x1000 /* 16384 subsectors of 4kBytes */ -#define N25Q512A_PAGE_SIZE 0x100 /* 262144 pages of 256 bytes */ - -#define N25Q512A_DUMMY_CYCLES_READ 8 -#define N25Q512A_DUMMY_CYCLES_READ_QUAD 10 -#define N25Q512A_DUMMY_CYCLES_READ_DTR 6 -#define N25Q512A_DUMMY_CYCLES_READ_QUAD_DTR 8 - -#define N25Q512A_BULK_ERASE_MAX_TIME 480000 -#define N25Q512A_SECTOR_ERASE_MAX_TIME 3000 -#define N25Q512A_SUBSECTOR_ERASE_MAX_TIME 800 - -/** - * @brief N25Q512A Commands - */ -/* Reset Operations */ -#define RESET_ENABLE_CMD 0x66 -#define RESET_MEMORY_CMD 0x99 - -/* Identification Operations */ -#define READ_ID_CMD 0x9E -#define READ_ID_CMD2 0x9F -#define MULTIPLE_IO_READ_ID_CMD 0xAF -#define READ_SERIAL_FLASH_DISCO_PARAM_CMD 0x5A - -/* Read Operations */ -#define READ_CMD 0x03 -#define READ_4_BYTE_ADDR_CMD 0x13 - -#define FAST_READ_CMD 0x0B -#define FAST_READ_DTR_CMD 0x0D -#define FAST_READ_4_BYTE_ADDR_CMD 0x0C - -#define DUAL_OUT_FAST_READ_CMD 0x3B -#define DUAL_OUT_FAST_READ_DTR_CMD 0x3D -#define DUAL_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x3C - -#define DUAL_INOUT_FAST_READ_CMD 0xBB -#define DUAL_INOUT_FAST_READ_DTR_CMD 0xBD -#define DUAL_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xBC - -#define QUAD_OUT_FAST_READ_CMD 0x6B -#define QUAD_OUT_FAST_READ_DTR_CMD 0x6D -#define QUAD_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x6C - -#define QUAD_INOUT_FAST_READ_CMD 0xEB -#define QUAD_INOUT_FAST_READ_DTR_CMD 0xED -#define QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xEC - -/* Write Operations */ -#define WRITE_ENABLE_CMD 0x06 -#define WRITE_DISABLE_CMD 0x04 - -/* Register Operations */ -#define READ_STATUS_REG_CMD 0x05 -#define WRITE_STATUS_REG_CMD 0x01 - -#define READ_LOCK_REG_CMD 0xE8 -#define WRITE_LOCK_REG_CMD 0xE5 - -#define READ_FLAG_STATUS_REG_CMD 0x70 -#define CLEAR_FLAG_STATUS_REG_CMD 0x50 - -#define READ_NONVOL_CFG_REG_CMD 0xB5 -#define WRITE_NONVOL_CFG_REG_CMD 0xB1 - -#define READ_VOL_CFG_REG_CMD 0x85 -#define WRITE_VOL_CFG_REG_CMD 0x81 - -#define READ_ENHANCED_VOL_CFG_REG_CMD 0x65 -#define WRITE_ENHANCED_VOL_CFG_REG_CMD 0x61 - -#define READ_EXT_ADDR_REG_CMD 0xC8 -#define WRITE_EXT_ADDR_REG_CMD 0xC5 - -/* Program Operations */ -#define PAGE_PROG_CMD 0x02 -#define PAGE_PROG_4_BYTE_ADDR_CMD 0x12 - -#define DUAL_IN_FAST_PROG_CMD 0xA2 -#define EXT_DUAL_IN_FAST_PROG_CMD 0xD2 - -#define QUAD_IN_FAST_PROG_CMD 0x32 -#define EXT_QUAD_IN_FAST_PROG_CMD 0x12 /*0x38*/ -#define QUAD_IN_FAST_PROG_4_BYTE_ADDR_CMD 0x34 - -/* Erase Operations */ -#define SUBSECTOR_ERASE_CMD 0x20 -#define SUBSECTOR_ERASE_4_BYTE_ADDR_CMD 0x21 - -#define SECTOR_ERASE_CMD 0xD8 -#define SECTOR_ERASE_4_BYTE_ADDR_CMD 0xDC - -#define BULK_ERASE_CMD 0xC7 - -#define PROG_ERASE_RESUME_CMD 0x7A -#define PROG_ERASE_SUSPEND_CMD 0x75 - -/* One-Time Programmable Operations */ -#define READ_OTP_ARRAY_CMD 0x4B -#define PROG_OTP_ARRAY_CMD 0x42 - -/* 4-byte Address Mode Operations */ -#define ENTER_4_BYTE_ADDR_MODE_CMD 0xB7 -#define EXIT_4_BYTE_ADDR_MODE_CMD 0xE9 - -/* Quad Operations */ -#define ENTER_QUAD_CMD 0x35 -#define EXIT_QUAD_CMD 0xF5 - -/** - * @brief N25Q512A Registers - */ -/* Status Register */ -#define N25Q512A_SR_WIP ((uint8_t)0x01) /*!< Write in progress */ -#define N25Q512A_SR_WREN ((uint8_t)0x02) /*!< Write enable latch */ -#define N25Q512A_SR_BLOCKPR ((uint8_t)0x5C) /*!< Block protected against program and erase operations */ -#define N25Q512A_SR_PRBOTTOM ((uint8_t)0x20) /*!< Protected memory area defined by BLOCKPR starts from top or bottom */ -#define N25Q512A_SR_SRWREN ((uint8_t)0x80) /*!< Status register write enable/disable */ - -/* Non volatile Configuration Register */ -#define N25Q512A_NVCR_NBADDR ((uint16_t)0x0001) /*!< 3-bytes or 4-bytes addressing */ -#define N25Q512A_NVCR_SEGMENT ((uint16_t)0x0002) /*!< Upper or lower 128Mb segment selected by default */ -#define N25Q512A_NVCR_DUAL ((uint16_t)0x0004) /*!< Dual I/O protocol */ -#define N25Q512A_NVCR_QUAB ((uint16_t)0x0008) /*!< Quad I/O protocol */ -#define N25Q512A_NVCR_RH ((uint16_t)0x0010) /*!< Reset/hold */ -#define N25Q512A_NVCR_ODS ((uint16_t)0x01C0) /*!< Output driver strength */ -#define N25Q512A_NVCR_XIP ((uint16_t)0x0E00) /*!< XIP mode at power-on reset */ -#define N25Q512A_NVCR_NB_DUMMY ((uint16_t)0xF000) /*!< Number of dummy clock cycles */ - -/* Volatile Configuration Register */ -#define N25Q512A_VCR_WRAP ((uint8_t)0x03) /*!< Wrap */ -#define N25Q512A_VCR_XIP ((uint8_t)0x08) /*!< XIP */ -#define N25Q512A_VCR_NB_DUMMY ((uint8_t)0xF0) /*!< Number of dummy clock cycles */ - -/* Extended Address Register */ -#define N25Q512A_EAR_A24 ((uint8_t)0x01) /*!< Select the lower or upper 128Mb segment */ - -/* Enhanced Volatile Configuration Register */ -#define N25Q512A_EVCR_ODS ((uint8_t)0x07) /*!< Output driver strength */ -#define N25Q512A_EVCR_VPPA ((uint8_t)0x08) /*!< Vpp accelerator */ -#define N25Q512A_EVCR_RH ((uint8_t)0x10) /*!< Reset/hold */ -#define N25Q512A_EVCR_DUAL ((uint8_t)0x40) /*!< Dual I/O protocol */ -#define N25Q512A_EVCR_QUAD ((uint8_t)0x80) /*!< Quad I/O protocol */ - -/* Flag Status Register */ -#define N25Q512A_FSR_NBADDR ((uint8_t)0x01) /*!< 3-bytes or 4-bytes addressing */ -#define N25Q512A_FSR_PRERR ((uint8_t)0x02) /*!< Protection error */ -#define N25Q512A_FSR_PGSUS ((uint8_t)0x04) /*!< Program operation suspended */ -#define N25Q512A_FSR_VPPERR ((uint8_t)0x08) /*!< Invalid voltage during program or erase */ -#define N25Q512A_FSR_PGERR ((uint8_t)0x10) /*!< Program error */ -#define N25Q512A_FSR_ERERR ((uint8_t)0x20) /*!< Erase error */ -#define N25Q512A_FSR_ERSUS ((uint8_t)0x40) /*!< Erase operation suspended */ -#define N25Q512A_FSR_READY ((uint8_t)0x80) /*!< Ready or command in progress */ - -/** - * @} - */ - -/** @defgroup N25Q512A_Exported_Functions - * @{ - */ -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __N25Q512A_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/nt35510 b/Drivers/BSP/Components/nt35510 new file mode 160000 index 0000000000..28c54d41d6 --- /dev/null +++ b/Drivers/BSP/Components/nt35510 @@ -0,0 +1 @@ +Subproject commit 28c54d41d6cf2ace41a27f432b629919ba9eae92 diff --git a/Drivers/BSP/Components/nt35510/LICENSE.md b/Drivers/BSP/Components/nt35510/LICENSE.md deleted file mode 100644 index ec091c43fc..0000000000 --- a/Drivers/BSP/Components/nt35510/LICENSE.md +++ /dev/null @@ -1,11 +0,0 @@ -Copyright 2019 STMicroelectronics. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/Components/nt35510/Release_Notes.html b/Drivers/BSP/Components/nt35510/Release_Notes.html deleted file mode 100644 index 7792e5cfca..0000000000 --- a/Drivers/BSP/Components/nt35510/Release_Notes.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - Release Notes for NT35510 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

NT35510 Component Drivers

-

Copyright © 2020 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the NT35510 LCD DSI component drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
-
-For complete documentation on STM32 Microcontrollers , visit: www.st.com/stm32 -
- - diff --git a/Drivers/BSP/Components/nt35510/_htmresc/favicon.png b/Drivers/BSP/Components/nt35510/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/nt35510/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/nt35510/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/nt35510/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/nt35510/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/nt35510/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/nt35510/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/nt35510/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/nt35510/nt35510.c b/Drivers/BSP/Components/nt35510/nt35510.c deleted file mode 100644 index c21fedcf63..0000000000 --- a/Drivers/BSP/Components/nt35510/nt35510.c +++ /dev/null @@ -1,250 +0,0 @@ -/** - ****************************************************************************** - * @file nt35510.c - * @author MCD Application Team - * @brief This file provides the LCD Driver for Frida Techshine 3K138 (WVGA) - * DSI LCD Display NT35510. - ****************************************************************************** - * @attention - * - * Copyright (c) 2020 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "nt35510.h" -#include -#include - - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup NT35510 NT35510 - * @brief This file provides a set of functions needed to drive the - * NT35510 IC display driver. - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/** @defgroup NT35510_Private_Constants NT35510 Private Constants - * @{ - */ - -/* - * @brief Constant tables of register settings used to transmit DSI - * command packets as power up initialization sequence of the Frida 3K138 - */ - -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -/** @defgroup NT35510_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ -/** @defgroup NT35510_Exported_Functions OTM8009A Exported Functions - * @{ - */ - -/** - * @brief Initializes the LCD Frida display part by communication in DSI mode in Video Mode - * with IC Display Driver NT35510 (see IC Driver specification for more information). - * @param hdsi_eval : pointer on DSI configuration structure - * @param hdsivideo_handle : pointer on DSI video mode configuration structure - * @retval Status - */ -uint8_t NT35510_Init(uint32_t ColorCoding, uint32_t orientation) -{ - NT35510_IO_Delay(120); - -/* ************************************************************************** */ -/* Proprietary Initialization */ -/* ************************************************************************** */ - const uint8_t nt35510_reg[] = {0x55, 0xAA, 0x52, 0x08, 0x01, 0xF0}; - const uint8_t nt35510_reg1[] = {0x03, 0x03, 0x03, 0xB0}; - const uint8_t nt35510_reg2[] = {0x46, 0x46, 0x46, 0xB6}; - const uint8_t nt35510_reg3[] = {0x03, 0x03, 0x03, 0xB1}; - const uint8_t nt35510_reg4[] = {0x36, 0x36, 0x36, 0xB7}; - const uint8_t nt35510_reg5[] = {0x00, 0x00, 0x02, 0xB2}; - const uint8_t nt35510_reg6[] = {0x26, 0x26, 0x26, 0xB8}; - const uint8_t nt35510_reg7[] = {0xBF, 0x01}; - const uint8_t nt35510_reg8[] = {0x09, 0x09, 0x09, 0xB3}; - const uint8_t nt35510_reg9[] = {0x36, 0x36, 0x36, 0xB9}; - const uint8_t nt35510_reg10[] = {0x08, 0x08, 0x08, 0xB5}; - const uint8_t nt35510_reg12[] = {0x26, 0x26, 0x26, 0xBA}; - const uint8_t nt35510_reg13[] = {0x00, 0x80, 0x00, 0xBC}; - const uint8_t nt35510_reg14[] = {0x00, 0x80, 0x00, 0xBD}; - const uint8_t nt35510_reg15[] = {0x00, 0x50, 0xBE}; - const uint8_t nt35510_reg16[] = {0x55, 0xAA, 0x52, 0x08, 0x00, 0xF0}; - const uint8_t nt35510_reg17[] = {0xFC, 0x00, 0xB1}; - const uint8_t nt35510_reg18[] = {0xB6, 0x03}; - const uint8_t nt35510_reg19[] = {0xB5, 0x51}; - const uint8_t nt35510_reg20[] = {0x00, 0x00, 0xB7}; - const uint8_t nt35510_reg21[] = {0x01, 0x02, 0x02, 0x02, 0xB8}; - const uint8_t nt35510_reg22[] = {0x00, 0x00, 0x00, 0xBC}; - const uint8_t nt35510_reg23[] = {0x03, 0x00, 0x00, 0xCC}; - const uint8_t nt35510_reg24[] = {0xBA, 0x01}; - const uint8_t nt35510_madctl_portrait[] = {NT35510_CMD_MADCTL ,0x00}; - const uint8_t nt35510_caset_portrait[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_CASET}; - const uint8_t nt35510_raset_portrait[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_RASET}; - const uint8_t nt35510_madctl_landscape[] = {NT35510_CMD_MADCTL, 0x60}; - const uint8_t nt35510_caset_landscape[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_CASET}; - const uint8_t nt35510_raset_landscape[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_RASET}; - const uint8_t nt35510_reg26[] = {NT35510_CMD_TEEON, 0x00}; /* Tear on */ - const uint8_t nt35510_reg27[] = {NT35510_CMD_SLPOUT, 0x00}; /* Sleep out */ - const uint8_t nt35510_reg30[] = {NT35510_CMD_DISPON, 0x00}; - - const uint8_t nt35510_reg31[] = {NT35510_CMD_WRDISBV, 0x7F}; - const uint8_t nt35510_reg32[] = {NT35510_CMD_WRCTRLD, 0x2C}; - const uint8_t nt35510_reg33[] = {NT35510_CMD_WRCABC, 0x02}; - const uint8_t nt35510_reg34[] = {NT35510_CMD_WRCABCMB, 0xFF}; - const uint8_t nt35510_reg35[] = {NT35510_CMD_RAMWR, 0x00}; - const uint8_t nt35510_reg36[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB565}; - const uint8_t nt35510_reg37[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB888}; - - DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg); /* LV2: Page 1 enable */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg1);/* AVDD: 5.2V */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg2);/* AVDD: Ratio */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg3);/* AVEE: -5.2V */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg4);/* AVEE: Ratio */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg5);/* VCL: -2.5V */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg6);/* VCL: Ratio */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg7);/* VGH: 15V (Free Pump) */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg8); - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg9);/* VGH: Ratio */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg10);/* VGL_REG: -10V */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg12);/* VGLX: Ratio */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg13);/* VGMP/VGSP: 4.5V/0V */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg14);/* VGMN/VGSN:-4.5V/0V */ - DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg15);/* VCOM: -1.325V */ - -/* ************************************************************************** */ -/* Proprietary DCS Initialization */ -/* ************************************************************************** */ - DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg16);/* LV2: Page 0 enable */ - DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg17);/* Display control */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg18);/* Src hold time */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg19); - DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg20);/* Gate EQ control */ - DSI_IO_WriteCmd(4, (uint8_t *)nt35510_reg21);/* Src EQ control(Mode2) */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg22);/* Inv. mode(2-dot) */ - DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg23); - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg24); - /* Tear on */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg26); - /* Set Pixel color format to RGB888 */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg37); - -/* ************************************************************************** */ -/* Standard DCS Initialization */ -/* ************************************************************************** */ - - /* Add a delay, otherwise MADCTL not taken */ - NT35510_IO_Delay(200); - - /* Configure orientation */ - if(orientation == NT35510_ORIENTATION_PORTRAIT) - { - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_portrait); - DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_portrait); - DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_portrait); - } - else - { - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_landscape); - DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_landscape); - DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_landscape); - } - - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27); - /* Wait for sleep out exit */ - NT35510_IO_Delay(120); - - switch(ColorCoding) - { - case NT35510_FORMAT_RBG565 : - /* Set Pixel color format to RGB565 */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg36); - break; - case NT35510_FORMAT_RGB888 : - /* Set Pixel color format to RGB888 */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37); - break; - default : - /* Set Pixel color format to RGB888 */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37); - break; - } - - /** CABC : Content Adaptive Backlight Control section start >> */ - /* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg31); - /* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg32); - /* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg33); - /* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */ - DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg34); - /** CABC : Content Adaptive Backlight Control section end << */ - - /* Display on */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30); - - /* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */ - /* DSI host from LTDC incoming pixels in video mode */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg35); - - return 0; -} - - -/** - * @} - */ - -uint8_t NT35510_DeInit(void) -{ - const uint8_t nt35510_reg30b[] = {NT35510_CMD_DISPOFF, 0x00}; - const uint8_t nt35510_reg27b[] = {NT35510_CMD_SLPIN, 0x00}; - /* Display off */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30b); - NT35510_IO_Delay(120); - /* Sleep in */ - DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27b); - return 0; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - diff --git a/Drivers/BSP/Components/nt35510/nt35510.h b/Drivers/BSP/Components/nt35510/nt35510.h deleted file mode 100644 index e43c33fe84..0000000000 --- a/Drivers/BSP/Components/nt35510/nt35510.h +++ /dev/null @@ -1,247 +0,0 @@ -/** - ****************************************************************************** - * @file nt35510.h - * @author MCD Application Team - * @brief This file contains all the constants parameters for the NT35510 - * which is the LCD Driver for Frida Techshine 3K138 (WVGA) - * DSI LCD Display. - ****************************************************************************** - * @attention - * - * Copyright (c) 2020 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __NT35510_H -#define __NT35510_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup nt35510 - * @{ - */ - -/** @addtogroup NT35510_Exported_Variables - * @{ - */ - -#if defined ( __GNUC__ ) -#ifndef __weak -#define __weak __attribute__((weak)) -#endif /* __weak */ -#endif /* __GNUC__ */ - -/** - * @brief LCD_OrientationTypeDef - * Possible values of Display Orientation - */ -#define NT35510_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */ -#define NT35510_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */ - -/** - * @brief Possible values of - * pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets - */ -#define NT35510_FORMAT_RGB888 ((uint32_t)0x00) /* Pixel format chosen is RGB888 : 24 bpp */ -#define NT35510_FORMAT_RBG565 ((uint32_t)0x02) /* Pixel format chosen is RGB565 : 16 bpp */ - -/** - * @brief nt35510_480x800 Size - */ - -/* Width and Height in Portrait mode */ -#define NT35510_480X800_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ -#define NT35510_480X800_HEIGHT ((uint16_t)800) /* LCD PIXEL HEIGHT */ - -/* Width and Height in Landscape mode */ -#define NT35510_800X480_WIDTH ((uint16_t)800) /* LCD PIXEL WIDTH */ -#define NT35510_800X480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */ - -/** - * @brief NT35510_480X800 Timing parameters for Portrait orientation mode - */ -#define NT35510_480X800_HSYNC ((uint16_t)2) /* Horizontal synchronization */ -#define NT35510_480X800_HBP ((uint16_t)34) /* Horizontal back porch */ -#define NT35510_480X800_HFP ((uint16_t)34) /* Horizontal front porch */ - -#define NT35510_480X800_VSYNC ((uint16_t)120) /* Vertical synchronization */ -#define NT35510_480X800_VBP ((uint16_t)150) /* Vertical back porch */ -#define NT35510_480X800_VFP ((uint16_t)150) /* Vertical front porch */ - -/** - * @brief NT35510_800X480 Timing parameters for Landscape orientation mode - * Same values as for Portrait mode in fact. - */ -#define NT35510_800X480_HSYNC NT35510_480X800_VSYNC /* Horizontal synchronization */ -#define NT35510_800X480_HBP NT35510_480X800_VBP /* Horizontal back porch */ -#define NT35510_800X480_HFP NT35510_480X800_VFP /* Horizontal front porch */ -#define NT35510_800X480_VSYNC NT35510_480X800_HSYNC /* Vertical synchronization */ -#define NT35510_800X480_VBP NT35510_480X800_HBP /* Vertical back porch */ -#define NT35510_800X480_VFP NT35510_480X800_HFP /* Vertical front porch */ - - -/* List of NT35510 used commands */ -/* Detailed in NT35510 Data Sheet v0.80 */ -/* Version of 10/28/2011 */ -/* Command, NumberOfArguments */ - -#define NT35510_CMD_NOP 0x00 /* NOP */ -#define NT35510_CMD_SWRESET 0x01 /* SW reset */ -#define NT35510_CMD_RDDID 0x04 /* Read display ID */ -#define NT35510_CMD_RDNUMED 0x05 /* Read number of errors on DSI */ -#define NT35510_CMD_RDDPM 0x0A /* Read display power mode */ -#define NT35510_CMD_RDDMADCTL 0x0B /* Read display MADCTL */ -#define NT35510_CMD_RDDCOLMOD 0x0C /* Read display pixel format */ -#define NT35510_CMD_RDDIM 0x0D /* Read display image mode */ -#define NT35510_CMD_RDDSM 0x0E /* Read display signal mode */ -#define NT35510_CMD_RDDSDR 0x0F /* Read display self-diagnostics result */ -#define NT35510_CMD_SLPIN 0x10 /* Sleep in */ -#define NT35510_CMD_SLPOUT 0x11 /* Sleep out */ -#define NT35510_CMD_PTLON 0x12 /* Partial mode on */ -#define NT35510_CMD_NORON 0x13 /* Normal display mode on */ -#define NT35510_CMD_INVOFF 0x20 /* Display inversion off */ -#define NT35510_CMD_INVON 0x21 /* Display inversion on */ -#define NT35510_CMD_ALLPOFF 0x22 /* All pixel off */ -#define NT35510_CMD_ALLPON 0x23 /* All pixel on */ -#define NT35510_CMD_GAMSET 0x26 /* Gamma set */ -#define NT35510_CMD_DISPOFF 0x28 /* Display off */ -#define NT35510_CMD_DISPON 0x29 /* Display on */ -#define NT35510_CMD_CASET 0x2A /* Column address set */ -#define NT35510_CMD_RASET 0x2B /* Row address set */ -#define NT35510_CMD_RAMWR 0x2C /* Memory write */ -#define NT35510_CMD_RAMRD 0x2E /* Memory read */ -#define NT35510_CMD_PLTAR 0x30 /* Partial area */ -#define NT35510_CMD_TOPC 0x32 /* Turn On Peripheral Command */ -#define NT35510_CMD_TEOFF 0x34 /* Tearing effect line off */ -#define NT35510_CMD_TEEON 0x35 /* Tearing effect line on */ -#define NT35510_CMD_MADCTL 0x36 /* Memory data access control */ -#define NT35510_CMD_IDMOFF 0x38 /* Idle mode off */ -#define NT35510_CMD_IDMON 0x39 /* Idle mode on */ -#define NT35510_CMD_COLMOD 0x3A /* Interface pixel format */ -#define NT35510_CMD_RAMWRC 0x3C /* Memory write continue */ -#define NT35510_CMD_RAMRDC 0x3E /* Memory read continue */ -#define NT35510_CMD_STESL 0x44 /* Set tearing effect scan line */ -#define NT35510_CMD_GSL 0x45 /* Get scan line */ - -#define NT35510_CMD_DSTBON 0x4F /* Deep standby mode on */ -#define NT35510_CMD_WRPFD 0x50 /* Write profile value for display */ -#define NT35510_CMD_WRDISBV 0x51 /* Write display brightness */ -#define NT35510_CMD_RDDISBV 0x52 /* Read display brightness */ -#define NT35510_CMD_WRCTRLD 0x53 /* Write CTRL display */ -#define NT35510_CMD_RDCTRLD 0x54 /* Read CTRL display value */ -#define NT35510_CMD_WRCABC 0x55 /* Write content adaptative brightness control */ -#define NT35510_CMD_RDCABC 0x56 /* Read content adaptive brightness control */ -#define NT35510_CMD_WRHYSTE 0x57 /* Write hysteresis */ -#define NT35510_CMD_WRGAMMSET 0x58 /* Write gamme setting */ -#define NT35510_CMD_RDFSVM 0x5A /* Read FS value MSBs */ -#define NT35510_CMD_RDFSVL 0x5B /* Read FS value LSBs */ -#define NT35510_CMD_RDMFFSVM 0x5C /* Read median filter FS value MSBs */ -#define NT35510_CMD_RDMFFSVL 0x5D /* Read median filter FS value LSBs */ -#define NT35510_CMD_WRCABCMB 0x5E /* Write CABC minimum brightness */ -#define NT35510_CMD_RDCABCMB 0x5F /* Read CABC minimum brightness */ -#define NT35510_CMD_WRLSCC 0x65 /* Write light sensor compensation coefficient value */ -#define NT35510_CMD_RDLSCCM 0x66 /* Read light sensor compensation coefficient value MSBs */ -#define NT35510_CMD_RDLSCCL 0x67 /* Read light sensor compensation coefficient value LSBs */ -#define NT35510_CMD_RDBWLB 0x70 /* Read black/white low bits */ -#define NT35510_CMD_RDBKX 0x71 /* Read Bkx */ -#define NT35510_CMD_RDBKY 0x72 /* Read Bky */ -#define NT35510_CMD_RDWX 0x73 /* Read Wx */ -#define NT35510_CMD_RDWY 0x74 /* Read Wy */ -#define NT35510_CMD_RDRGLB 0x75 /* Read red/green low bits */ -#define NT35510_CMD_RDRX 0x76 /* Read Rx */ -#define NT35510_CMD_RDRY 0x77 /* Read Ry */ -#define NT35510_CMD_RDGX 0x78 /* Read Gx */ -#define NT35510_CMD_RDGY 0x79 /* Read Gy */ -#define NT35510_CMD_RDBALB 0x7A /* Read blue/acolor low bits */ -#define NT35510_CMD_RDBX 0x7B /* Read Bx */ -#define NT35510_CMD_RDBY 0x7C /* Read By */ -#define NT35510_CMD_RDAX 0x7D /* Read Ax */ -#define NT35510_CMD_RDAY 0x7E /* Read Ay */ -#define NT35510_CMD_RDDDBS 0xA1 /* Read DDB start */ -#define NT35510_CMD_RDDDBC 0xA8 /* Read DDB continue */ -#define NT35510_CMD_RDDCS 0xAA /* Read first checksum */ -#define NT35510_CMD_RDCCS 0xAF /* Read continue checksum */ -#define NT35510_CMD_RDID1 0xDA /* Read ID1 value */ -#define NT35510_CMD_RDID2 0xDB /* Read ID2 value */ -#define NT35510_CMD_RDID3 0xDC /* Read ID3 value */ - -/* Parameter TELOM : Tearing Effect Line Output Mode : possible values */ -#define NT35510_TEEON_TELOM_VBLANKING_INFO_ONLY 0x00 -#define NT35510_TEEON_TELOM_VBLANKING_AND_HBLANKING_INFO 0x01 - -/* Possible used values of MADCTR */ -#define NT35510_MADCTR_MODE_PORTRAIT 0x00 -#define NT35510_MADCTR_MODE_LANDSCAPE 0x60 /* MY = 0, MX = 1, MV = 1, ML = 0, RGB = 0 */ - -/* Possible values of COLMOD parameter corresponding to used pixel formats */ -#define NT35510_COLMOD_RGB565 0x55 -#define NT35510_COLMOD_RGB888 0x77 - -/** - * @brief NT35510_480X800 frequency divider - */ -#define NT35510_480X800_FREQUENCY_DIVIDER 2 /* LCD Frequency divider */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup NT35510_Exported_Macros NT35510 Exported Macros - * @{ - */ - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @addtogroup NT35510_Exported_Functions - * @{ - */ -void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams); -uint8_t NT35510_Init(uint32_t ColorCoding, uint32_t orientation); -uint8_t NT35510_DeInit(void); -void NT35510_IO_Delay(uint32_t Delay); - -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __NT35510_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - diff --git a/Drivers/BSP/Components/otm8009a b/Drivers/BSP/Components/otm8009a new file mode 160000 index 0000000000..d8caa51709 --- /dev/null +++ b/Drivers/BSP/Components/otm8009a @@ -0,0 +1 @@ +Subproject commit d8caa51709b6beabc28ff40268c513c74bad11f1 diff --git a/Drivers/BSP/Components/otm8009a/LICENSE.md b/Drivers/BSP/Components/otm8009a/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/otm8009a/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/otm8009a/Release_Notes.html b/Drivers/BSP/Components/otm8009a/Release_Notes.html deleted file mode 100644 index 1c422b5b48..0000000000 --- a/Drivers/BSP/Components/otm8009a/Release_Notes.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - Release Notes for OTM8009A Component Driver - - - - - - -
-
-
-

Release Notes for

-

OTM8009A Component Driver

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the OTM8009A Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Set the PWM backlight frequency to over 22KHz to avoid audible noise.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update otm8009a.h to support ARM compiler Keil V6
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update DSI controller timings
  • -
  • CABC LEDPWM frequency adjusted to 19,5kHz
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update DSI controller timings
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update DSI controller timings
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/otm8009a/_htmresc/favicon.png b/Drivers/BSP/Components/otm8009a/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/otm8009a/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/otm8009a/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/otm8009a/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/otm8009a/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/otm8009a/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/otm8009a/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/otm8009a/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/otm8009a/otm8009a.c b/Drivers/BSP/Components/otm8009a/otm8009a.c deleted file mode 100644 index 1662e4c140..0000000000 --- a/Drivers/BSP/Components/otm8009a/otm8009a.c +++ /dev/null @@ -1,433 +0,0 @@ -/** - ****************************************************************************** - * @file otm8009a.c - * @author MCD Application Team - * @brief This file provides the LCD Driver for KoD KM-040TMP-02-0621 (WVGA) - * DSI LCD Display OTM8009A. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "otm8009a.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup OTM8009A OTM8009A - * @brief This file provides a set of functions needed to drive the - * otm8009a IC display driver. - * @{ - */ - -/* Private types -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Private constants ---------------------------------------------------------*/ -/** @defgroup OTM8009A_Private_Constants OTM8009A Private Constants - * @{ - */ - -/* - * @brief Constant tables of register settings used to transmit DSI - * command packets as power up initialization sequence of the KoD LCD (OTM8009A LCD Driver) - */ -const uint8_t lcdRegData1[] = {0x80,0x09,0x01,0xFF}; -const uint8_t lcdRegData2[] = {0x80,0x09,0xFF}; -const uint8_t lcdRegData3[] = {0x00,0x09,0x0F,0x0E,0x07,0x10,0x0B,0x0A,0x04,0x07,0x0B,0x08,0x0F,0x10,0x0A,0x01,0xE1}; -const uint8_t lcdRegData4[] = {0x00,0x09,0x0F,0x0E,0x07,0x10,0x0B,0x0A,0x04,0x07,0x0B,0x08,0x0F,0x10,0x0A,0x01,0xE2}; -const uint8_t lcdRegData5[] = {0x79,0x79,0xD8}; -const uint8_t lcdRegData6[] = {0x00,0x01,0xB3}; -const uint8_t lcdRegData7[] = {0x85,0x01,0x00,0x84,0x01,0x00,0xCE}; -const uint8_t lcdRegData8[] = {0x18,0x04,0x03,0x39,0x00,0x00,0x00,0x18,0x03,0x03,0x3A,0x00,0x00,0x00,0xCE}; -const uint8_t lcdRegData9[] = {0x18,0x02,0x03,0x3B,0x00,0x00,0x00,0x18,0x01,0x03,0x3C,0x00,0x00,0x00,0xCE}; -const uint8_t lcdRegData10[] = {0x01,0x01,0x20,0x20,0x00,0x00,0x01,0x02,0x00,0x00,0xCF}; -const uint8_t lcdRegData11[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData12[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData13[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData14[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData15[] = {0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData16[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData17[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCB}; -const uint8_t lcdRegData18[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCB}; -const uint8_t lcdRegData19[] = {0x00,0x26,0x09,0x0B,0x01,0x25,0x00,0x00,0x00,0x00,0xCC}; -const uint8_t lcdRegData20[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x0A,0x0C,0x02,0xCC}; -const uint8_t lcdRegData21[] = {0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC}; -const uint8_t lcdRegData22[] = {0x00,0x25,0x0C,0x0A,0x02,0x26,0x00,0x00,0x00,0x00,0xCC}; -const uint8_t lcdRegData23[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x0B,0x09,0x01,0xCC}; -const uint8_t lcdRegData24[] = {0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC}; -const uint8_t lcdRegData25[] = {0xFF,0xFF,0xFF,0xFF}; -/* - * CASET value (Column Address Set) : X direction LCD GRAM boundaries - * depending on LCD orientation mode and PASET value (Page Address Set) : Y direction - * LCD GRAM boundaries depending on LCD orientation mode - * XS[15:0] = 0x000 = 0, XE[15:0] = 0x31F = 799 for landscape mode : apply to CASET - * YS[15:0] = 0x000 = 0, YE[15:0] = 0x31F = 799 for portrait mode : : apply to PASET - */ -const uint8_t lcdRegData27[] = {0x00, 0x00, 0x03, 0x1F, OTM8009A_CMD_CASET}; -/* - * XS[15:0] = 0x000 = 0, XE[15:0] = 0x1DF = 479 for portrait mode : apply to CASET - * YS[15:0] = 0x000 = 0, YE[15:0] = 0x1DF = 479 for landscape mode : apply to PASET - */ -const uint8_t lcdRegData28[] = {0x00, 0x00, 0x01, 0xDF, OTM8009A_CMD_PASET}; - - -const uint8_t ShortRegData1[] = {OTM8009A_CMD_NOP, 0x00}; -const uint8_t ShortRegData2[] = {OTM8009A_CMD_NOP, 0x80}; -const uint8_t ShortRegData3[] = {0xC4, 0x30}; -const uint8_t ShortRegData4[] = {OTM8009A_CMD_NOP, 0x8A}; -const uint8_t ShortRegData5[] = {0xC4, 0x40}; -const uint8_t ShortRegData6[] = {OTM8009A_CMD_NOP, 0xB1}; -const uint8_t ShortRegData7[] = {0xC5, 0xA9}; -const uint8_t ShortRegData8[] = {OTM8009A_CMD_NOP, 0x91}; -const uint8_t ShortRegData9[] = {0xC5, 0x34}; -const uint8_t ShortRegData10[] = {OTM8009A_CMD_NOP, 0xB4}; -const uint8_t ShortRegData11[] = {0xC0, 0x50}; -const uint8_t ShortRegData12[] = {0xD9, 0x4E}; -const uint8_t ShortRegData13[] = {OTM8009A_CMD_NOP, 0x81}; -const uint8_t ShortRegData14[] = {0xC1, 0x66}; -const uint8_t ShortRegData15[] = {OTM8009A_CMD_NOP, 0xA1}; -const uint8_t ShortRegData16[] = {0xC1, 0x08}; -const uint8_t ShortRegData17[] = {OTM8009A_CMD_NOP, 0x92}; -const uint8_t ShortRegData18[] = {0xC5, 0x01}; -const uint8_t ShortRegData19[] = {OTM8009A_CMD_NOP, 0x95}; -const uint8_t ShortRegData20[] = {OTM8009A_CMD_NOP, 0x94}; -const uint8_t ShortRegData21[] = {0xC5, 0x33}; -const uint8_t ShortRegData22[] = {OTM8009A_CMD_NOP, 0xA3}; -const uint8_t ShortRegData23[] = {0xC0, 0x1B}; -const uint8_t ShortRegData24[] = {OTM8009A_CMD_NOP, 0x82}; -const uint8_t ShortRegData25[] = {0xC5, 0x83}; -const uint8_t ShortRegData26[] = {0xC4, 0x83}; -const uint8_t ShortRegData27[] = {0xC1, 0x0E}; -const uint8_t ShortRegData28[] = {OTM8009A_CMD_NOP, 0xA6}; -const uint8_t ShortRegData29[] = {OTM8009A_CMD_NOP, 0xA0}; -const uint8_t ShortRegData30[] = {OTM8009A_CMD_NOP, 0xB0}; -const uint8_t ShortRegData31[] = {OTM8009A_CMD_NOP, 0xC0}; -const uint8_t ShortRegData32[] = {OTM8009A_CMD_NOP, 0xD0}; -const uint8_t ShortRegData33[] = {OTM8009A_CMD_NOP, 0x90}; -const uint8_t ShortRegData34[] = {OTM8009A_CMD_NOP, 0xE0}; -const uint8_t ShortRegData35[] = {OTM8009A_CMD_NOP, 0xF0}; -const uint8_t ShortRegData36[] = {OTM8009A_CMD_SLPOUT, 0x00}; -const uint8_t ShortRegData37[] = {OTM8009A_CMD_COLMOD, OTM8009A_COLMOD_RGB565}; -const uint8_t ShortRegData38[] = {OTM8009A_CMD_COLMOD, OTM8009A_COLMOD_RGB888}; -const uint8_t ShortRegData39[] = {OTM8009A_CMD_MADCTR, OTM8009A_MADCTR_MODE_LANDSCAPE}; -const uint8_t ShortRegData40[] = {OTM8009A_CMD_WRDISBV, 0x7F}; -const uint8_t ShortRegData41[] = {OTM8009A_CMD_WRCTRLD, 0x2C}; -const uint8_t ShortRegData42[] = {OTM8009A_CMD_WRCABC, 0x02}; -const uint8_t ShortRegData43[] = {OTM8009A_CMD_WRCABCMB, 0xFF}; -const uint8_t ShortRegData44[] = {OTM8009A_CMD_DISPON, 0x00}; -const uint8_t ShortRegData45[] = {OTM8009A_CMD_RAMWR, 0x00}; -const uint8_t ShortRegData46[] = {0xCF, 0x00}; -const uint8_t ShortRegData47[] = {0xC5, 0x66}; -const uint8_t ShortRegData48[] = {OTM8009A_CMD_NOP, 0xB6}; -const uint8_t ShortRegData49[] = {0xF5, 0x06}; -const uint8_t ShortRegData50[] = {OTM8009A_CMD_NOP, 0xB1}; -const uint8_t ShortRegData51[] = {0xC6, 0x05}; -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -/** @defgroup OTM8009A_Exported_Variables - * @{ - */ - -/** - * @} - */ - -/* Exported functions ---------------------------------------------------------*/ -/** @defgroup OTM8009A_Exported_Functions OTM8009A Exported Functions - * @{ - */ - -/** - * @brief DSI IO write short/long command. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams) -{ - /* NOTE : This function Should not be modified, when it is needed, - the DSI_IO_WriteCmd could be implemented in the user file - */ -} - -/** - * @brief Initializes the LCD KoD display part by communication in DSI mode in Video Mode - * with IC Display Driver OTM8009A (see IC Driver specification for more information). - * @param hdsi_eval : pointer on DSI configuration structure - * @param hdsivideo_handle : pointer on DSI video mode configuration structure - * @retval Status - */ -uint8_t OTM8009A_Init(uint32_t ColorCoding, uint32_t orientation) -{ - /* Enable CMD2 to access vendor specific commands */ - /* Enter in command 2 mode and set EXTC to enable address shift function (0x00) */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd( 3, (uint8_t *)lcdRegData1); - - /* Enter ORISE Command 2 */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); /* Shift address to 0x80 */ - DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData2); - - ///////////////////////////////////////////////////////////////////// - /* SD_PCH_CTRL - 0xC480h - 129th parameter - Default 0x00 */ - /* Set SD_PT */ - /* -> Source output level during porch and non-display area to GND */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData3); - OTM8009A_IO_Delay(10); - /* Not documented */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData4); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData5); - OTM8009A_IO_Delay(10); - ///////////////////////////////////////////////////////////////////// - - /* PWR_CTRL4 - 0xC4B0h - 178th parameter - Default 0xA8 */ - /* Set gvdd_en_test */ - /* -> enable GVDD test mode !!! */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData6); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData7); - - /* PWR_CTRL2 - 0xC590h - 146th parameter - Default 0x79 */ - /* Set pump 4 vgh voltage */ - /* -> from 15.0v down to 13.0v */ - /* Set pump 5 vgh voltage */ - /* -> from -12.0v downto -9.0v */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData8); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData9); - - /* P_DRV_M - 0xC0B4h - 181th parameter - Default 0x00 */ - /* -> Column inversion */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData10); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData11); - - /* VCOMDC - 0xD900h - 1st parameter - Default 0x39h */ - /* VCOM Voltage settings */ - /* -> from -1.0000v downto -1.2625v */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData12); - - /* Oscillator adjustment for Idle/Normal mode (LPDT only) set to 65Hz (default is 60Hz) */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData14); - - /* Video mode internal */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData15); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData16); - - /* PWR_CTRL2 - 0xC590h - 147h parameter - Default 0x00 */ - /* Set pump 4&5 x6 */ - /* -> ONLY VALID when PUMP4_EN_ASDM_HV = "0" */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData17); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData18); - - /* PWR_CTRL2 - 0xC590h - 150th parameter - Default 0x33h */ - /* Change pump4 clock ratio */ - /* -> from 1 line to 1/2 line */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData19); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData9); - - /* GVDD/NGVDD settings */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData5); - - /* PWR_CTRL2 - 0xC590h - 149th parameter - Default 0x33h */ - /* Rewrite the default value ! */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData20); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData21); - - /* Panel display timing Setting 3 */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData22); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData23); - - /* Power control 1 */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData24); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData25); - - /* Source driver precharge */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData26); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData15); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData27); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData28); - DSI_IO_WriteCmd( 2, (uint8_t *)lcdRegData6); - - /* GOAVST */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); - DSI_IO_WriteCmd( 6, (uint8_t *)lcdRegData7); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); - DSI_IO_WriteCmd( 14, (uint8_t *)lcdRegData8); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); - DSI_IO_WriteCmd( 14, (uint8_t *)lcdRegData9); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData10); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData46); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData11); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData33); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData12); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData13); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData14); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData15); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData16); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData34); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData17); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData35); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData18); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData2); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData19); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData33); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData20); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData29); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData21); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData30); - DSI_IO_WriteCmd( 10, (uint8_t *)lcdRegData22); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData31); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData23); - - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData32); - DSI_IO_WriteCmd( 15, (uint8_t *)lcdRegData24); - - ///////////////////////////////////////////////////////////////////////////// - /* PWR_CTRL1 - 0xc580h - 130th parameter - default 0x00 */ - /* Pump 1 min and max DM */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData13); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData47); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData48); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData49); - ///////////////////////////////////////////////////////////////////////////// - - /* CABC LEDPWM frequency adjusted to 22,7kHz */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData50); - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData51); - - /* Exit CMD2 mode */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd( 3, (uint8_t *)lcdRegData25); - - /*************************************************************************** */ - /* Standard DCS Initialization TO KEEP CAN BE DONE IN HSDT */ - /*************************************************************************** */ - - /* NOP - goes back to DCS std command ? */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - - /* Gamma correction 2.2+ table (HSDT possible) */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd( 16, (uint8_t *)lcdRegData3); - - /* Gamma correction 2.2- table (HSDT possible) */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - DSI_IO_WriteCmd( 16, (uint8_t *)lcdRegData4); - - /* Send Sleep Out command to display : no parameter */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData36); - - /* Wait for sleep out exit */ - OTM8009A_IO_Delay(120); - - switch(ColorCoding) - { - case OTM8009A_FORMAT_RBG565 : - /* Set Pixel color format to RGB565 */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData37); - break; - case OTM8009A_FORMAT_RGB888 : - /* Set Pixel color format to RGB888 */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData38); - break; - default : - break; - } - - /* Send command to configure display in landscape orientation mode. By default - the orientation mode is portrait */ - if(orientation == OTM8009A_ORIENTATION_LANDSCAPE) - { - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData39); - DSI_IO_WriteCmd( 4, (uint8_t *)lcdRegData27); - DSI_IO_WriteCmd( 4, (uint8_t *)lcdRegData28); - } - - /** CABC : Content Adaptive Backlight Control section start >> */ - /* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData40); - - /* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData41); - - /* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData42); - - /* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData43); - - /** CABC : Content Adaptive Backlight Control section end << */ - - /* Send Command Display On */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData44); - - /* NOP command */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData1); - - /* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */ - /* DSI host from LTDC incoming pixels in video mode */ - DSI_IO_WriteCmd(0, (uint8_t *)ShortRegData45); - - return 0; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/otm8009a/otm8009a.h b/Drivers/BSP/Components/otm8009a/otm8009a.h deleted file mode 100644 index 6d18d779c8..0000000000 --- a/Drivers/BSP/Components/otm8009a/otm8009a.h +++ /dev/null @@ -1,203 +0,0 @@ -/** - ****************************************************************************** - * @file otm8009a.h - * @author MCD Application Team - * @brief This file contains all the constants parameters for the OTM8009A - * which is the LCD Driver for KoD KM-040TMP-02-0621 (WVGA) - * DSI LCD Display. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __OTM8009A_H -#define __OTM8009A_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup otm8009a - * @{ - */ - -/** @addtogroup OTM8009A_Exported_Variables - * @{ - */ - -#if defined ( __GNUC__ ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) /* GNU and ARM Compiler 6 compilers */ -#ifndef __weak -#define __weak __attribute__((weak)) -#endif /* __weak */ -#endif /* __GNUC__ || (__ARMCC_VERSION && (__ARMCC_VERSION >= 6010050)) */ - -/** - * @brief LCD_OrientationTypeDef - * Possible values of Display Orientation - */ -#define OTM8009A_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */ -#define OTM8009A_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */ - -/** - * @brief Possible values of - * pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets - */ -#define OTM8009A_FORMAT_RGB888 ((uint32_t)0x00) /* Pixel format chosen is RGB888 : 24 bpp */ -#define OTM8009A_FORMAT_RBG565 ((uint32_t)0x02) /* Pixel format chosen is RGB565 : 16 bpp */ - -/** - * @brief otm8009a_480x800 Size - */ - -/* Width and Height in Portrait mode */ -#define OTM8009A_480X800_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ -#define OTM8009A_480X800_HEIGHT ((uint16_t)800) /* LCD PIXEL HEIGHT */ - -/* Width and Height in Landscape mode */ -#define OTM8009A_800X480_WIDTH ((uint16_t)800) /* LCD PIXEL WIDTH */ -#define OTM8009A_800X480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */ - -/** - * @brief OTM8009A_480X800 Timing parameters for Portrait orientation mode - */ -#define OTM8009A_480X800_HSYNC ((uint16_t)2) /* Horizontal synchronization */ -#define OTM8009A_480X800_HBP ((uint16_t)34) /* Horizontal back porch */ -#define OTM8009A_480X800_HFP ((uint16_t)34) /* Horizontal front porch */ -#define OTM8009A_480X800_VSYNC ((uint16_t)1) /* Vertical synchronization */ -#define OTM8009A_480X800_VBP ((uint16_t)15) /* Vertical back porch */ -#define OTM8009A_480X800_VFP ((uint16_t)16) /* Vertical front porch */ - -/** - * @brief OTM8009A_800X480 Timing parameters for Landscape orientation mode - * Same values as for Portrait mode in fact. - */ -#define OTM8009A_800X480_HSYNC OTM8009A_480X800_VSYNC /* Horizontal synchronization */ -#define OTM8009A_800X480_HBP OTM8009A_480X800_VBP /* Horizontal back porch */ -#define OTM8009A_800X480_HFP OTM8009A_480X800_VFP /* Horizontal front porch */ -#define OTM8009A_800X480_VSYNC OTM8009A_480X800_HSYNC /* Vertical synchronization */ -#define OTM8009A_800X480_VBP OTM8009A_480X800_HBP /* Vertical back porch */ -#define OTM8009A_800X480_VFP OTM8009A_480X800_HFP /* Vertical front porch */ - - -/* List of OTM8009A used commands */ -/* Detailed in OTM8009A Data Sheet 'DATA_SHEET_OTM8009A_V0 92.pdf' */ -/* Version of 14 June 2012 */ -#define OTM8009A_CMD_NOP 0x00 /* NOP command */ -#define OTM8009A_CMD_SWRESET 0x01 /* Sw reset command */ -#define OTM8009A_CMD_RDDMADCTL 0x0B /* Read Display MADCTR command : read memory display access ctrl */ -#define OTM8009A_CMD_RDDCOLMOD 0x0C /* Read Display pixel format */ -#define OTM8009A_CMD_SLPIN 0x10 /* Sleep In command */ -#define OTM8009A_CMD_SLPOUT 0x11 /* Sleep Out command */ -#define OTM8009A_CMD_PTLON 0x12 /* Partial mode On command */ - -#define OTM8009A_CMD_DISPOFF 0x28 /* Display Off command */ -#define OTM8009A_CMD_DISPON 0x29 /* Display On command */ - -#define OTM8009A_CMD_CASET 0x2A /* Column address set command */ -#define OTM8009A_CMD_PASET 0x2B /* Page address set command */ - -#define OTM8009A_CMD_RAMWR 0x2C /* Memory (GRAM) write command */ -#define OTM8009A_CMD_RAMRD 0x2E /* Memory (GRAM) read command */ - -#define OTM8009A_CMD_PLTAR 0x30 /* Partial area command (4 parameters) */ - -#define OTM8009A_CMD_TEOFF 0x34 /* Tearing Effect Line Off command : command with no parameter */ - -#define OTM8009A_CMD_TEEON 0x35 /* Tearing Effect Line On command : command with 1 parameter 'TELOM' */ - -/* Parameter TELOM : Tearing Effect Line Output Mode : possible values */ -#define OTM8009A_TEEON_TELOM_VBLANKING_INFO_ONLY 0x00 -#define OTM8009A_TEEON_TELOM_VBLANKING_AND_HBLANKING_INFO 0x01 - -#define OTM8009A_CMD_MADCTR 0x36 /* Memory Access write control command */ - -/* Possible used values of MADCTR */ -#define OTM8009A_MADCTR_MODE_PORTRAIT 0x00 -#define OTM8009A_MADCTR_MODE_LANDSCAPE 0x60 /* MY = 0, MX = 1, MV = 1, ML = 0, RGB = 0 */ - -#define OTM8009A_CMD_IDMOFF 0x38 /* Idle mode Off command */ -#define OTM8009A_CMD_IDMON 0x39 /* Idle mode On command */ - -#define OTM8009A_CMD_COLMOD 0x3A /* Interface Pixel format command */ - -/* Possible values of COLMOD parameter corresponding to used pixel formats */ -#define OTM8009A_COLMOD_RGB565 0x55 -#define OTM8009A_COLMOD_RGB888 0x77 - -#define OTM8009A_CMD_RAMWRC 0x3C /* Memory write continue command */ -#define OTM8009A_CMD_RAMRDC 0x3E /* Memory read continue command */ - -#define OTM8009A_CMD_WRTESCN 0x44 /* Write Tearing Effect Scan line command */ -#define OTM8009A_CMD_RDSCNL 0x45 /* Read Tearing Effect Scan line command */ - -/* CABC Management : ie : Content Adaptive Back light Control in IC OTM8009a */ -#define OTM8009A_CMD_WRDISBV 0x51 /* Write Display Brightness command */ -#define OTM8009A_CMD_WRCTRLD 0x53 /* Write CTRL Display command */ -#define OTM8009A_CMD_WRCABC 0x55 /* Write Content Adaptive Brightness command */ -#define OTM8009A_CMD_WRCABCMB 0x5E /* Write CABC Minimum Brightness command */ - -/** - * @brief OTM8009A_480X800 frequency divider - */ -#define OTM8009A_480X800_FREQUENCY_DIVIDER 2 /* LCD Frequency divider */ - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup OTM8009A_Exported_Macros OTM8009A Exported Macros - * @{ - */ - -/** - * @} - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @addtogroup OTM8009A_Exported_Functions - * @{ - */ -void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams); -uint8_t OTM8009A_Init(uint32_t ColorCoding, uint32_t orientation); -void OTM8009A_IO_Delay(uint32_t Delay); -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __OTM8009A_480X800_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ov2640 b/Drivers/BSP/Components/ov2640 new file mode 160000 index 0000000000..aec9e74003 --- /dev/null +++ b/Drivers/BSP/Components/ov2640 @@ -0,0 +1 @@ +Subproject commit aec9e7400350575dbae974faf3db91cd5631d78d diff --git a/Drivers/BSP/Components/ov2640/LICENSE.md b/Drivers/BSP/Components/ov2640/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ov2640/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ov2640/Release_Notes.html b/Drivers/BSP/Components/ov2640/Release_Notes.html deleted file mode 100644 index a013b162cc..0000000000 --- a/Drivers/BSP/Components/ov2640/Release_Notes.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - Release Notes for OV2640 Component Driver - - - - - - -
-
-
-

Release Notes for

-

OV2640 Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the OV2640 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • ov2640.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Align driver with the STM32Cube BSP architecture by removing check for initialization in ov2640_Init() and ov2640_ReadID() functions
  • -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ov2640/_htmresc/favicon.png b/Drivers/BSP/Components/ov2640/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ov2640/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ov2640/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ov2640/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ov2640/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ov2640/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ov2640/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ov2640/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ov2640/ov2640.c b/Drivers/BSP/Components/ov2640/ov2640.c deleted file mode 100644 index 490698a6df..0000000000 --- a/Drivers/BSP/Components/ov2640/ov2640.c +++ /dev/null @@ -1,1332 +0,0 @@ -/** - ****************************************************************************** - * @file ov2640.c - * @author MCD Application Team - * @version V1.0.2 - * @date 02-December-2014 - * @brief This file provides the OV2640 camera driver - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ov2640.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup OV2640 - * @brief This file provides a set of functions needed to drive the - * OV2640 Camera module. - * @{ - */ - -/** @defgroup OV2640_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV2640_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV2640_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV2640_Private_FunctionPrototypes - * @{ - */ -static uint32_t ov2640_ConvertValue(uint32_t feature, uint32_t value); -/** - * @} - */ - -/** @defgroup OV2640_Private_Variables - * @{ - */ - -CAMERA_DrvTypeDef ov2640_drv = -{ - ov2640_Init, - ov2640_ReadID, - ov2640_Config, -}; - -/* Initialization sequence for 480x272 resolution */ -const unsigned char OV2640_480x272[][2]= -{ - {0xff, 0x00}, /* Device control register list Table 12 */ - {0x2c, 0xff}, /* Reserved */ - {0x2e, 0xdf}, /* Reserved */ - {0xff, 0x01}, /* Device control register list Table 13 */ - {0x3c, 0x32}, /* Reserved */ - {0x11, 0x00}, /* Clock Rate Control */ - {0x09, 0x02}, /* Common control 2 */ - {0x04, 0xA8}, /* Mirror */ - {0x13, 0xe5}, /* Common control 8 */ - {0x14, 0x48}, /* Common control 9 */ - {0x2c, 0x0c}, /* Reserved */ - {0x33, 0x78}, /* Reserved */ - {0x3a, 0x33}, /* Reserved */ - {0x3b, 0xfB}, /* Reserved */ - {0x3e, 0x00}, /* Reserved */ - {0x43, 0x11}, /* Reserved */ - {0x16, 0x10}, /* Reserved */ - {0x4a, 0x81}, /* Reserved */ - {0x21, 0x99}, /* Reserved */ - {0x24, 0x40}, /* Luminance signal High range */ - {0x25, 0x38}, /* Luminance signal low range */ - {0x26, 0x82}, /* */ - {0x5c, 0x00}, /* Reserved */ - {0x63, 0x00}, /* Reserved */ - {0x46, 0x3f}, /* Frame length adjustment */ - {0x0c, 0x3c}, /* Common control 3 */ - {0x61, 0x70}, /* Histogram algo low level */ - {0x62, 0x80}, /* Histogram algo high level */ - {0x7c, 0x05}, /* Reserved */ - {0x20, 0x80}, /* Reserved */ - {0x28, 0x30}, /* Reserved */ - {0x6c, 0x00}, /* Reserved */ - {0x6d, 0x80}, /* Reserved */ - {0x6e, 0x00}, /* Reserved */ - {0x70, 0x02}, /* Reserved */ - {0x71, 0x94}, /* Reserved */ - {0x73, 0xc1}, /* Reserved */ - {0x3d, 0x34}, /* Reserved */ - {0x5a, 0x57}, /* Reserved */ - {0x12, 0x00}, /* Common control 7 */ - {0x11, 0x00}, /* Clock Rate Control 2*/ - {0x17, 0x11}, /* Horiz window start MSB 8bits */ - {0x18, 0x75}, /* Horiz window end MSB 8bits */ - {0x19, 0x01}, /* Vert window line start MSB 8bits */ - {0x1a, 0x97}, /* Vert window line end MSB 8bits */ - {0x32, 0x36}, - {0x03, 0x0f}, - {0x37, 0x40}, - {0x4f, 0xbb}, - {0x50, 0x9c}, - {0x5a, 0x57}, - {0x6d, 0x80}, - {0x6d, 0x38}, - {0x39, 0x02}, - {0x35, 0x88}, - {0x22, 0x0a}, - {0x37, 0x40}, - {0x23, 0x00}, - {0x34, 0xa0}, - {0x36, 0x1a}, - {0x06, 0x02}, - {0x07, 0xc0}, - {0x0d, 0xb7}, - {0x0e, 0x01}, - {0x4c, 0x00}, - {0xff, 0x00}, - {0xe5, 0x7f}, - {0xf9, 0xc0}, - {0x41, 0x24}, - {0xe0, 0x14}, - {0x76, 0xff}, - {0x33, 0xa0}, - {0x42, 0x20}, - {0x43, 0x18}, - {0x4c, 0x00}, - {0x87, 0xd0}, - {0x88, 0x3f}, - {0xd7, 0x03}, - {0xd9, 0x10}, - {0xd3, 0x82}, - {0xc8, 0x08}, - {0xc9, 0x80}, - {0x7d, 0x00}, - {0x7c, 0x03}, - {0x7d, 0x48}, - {0x7c, 0x08}, - {0x7d, 0x20}, - {0x7d, 0x10}, - {0x7d, 0x0e}, - {0x90, 0x00}, - {0x91, 0x0e}, - {0x91, 0x1a}, - {0x91, 0x31}, - {0x91, 0x5a}, - {0x91, 0x69}, - {0x91, 0x75}, - {0x91, 0x7e}, - {0x91, 0x88}, - {0x91, 0x8f}, - {0x91, 0x96}, - {0x91, 0xa3}, - {0x91, 0xaf}, - {0x91, 0xc4}, - {0x91, 0xd7}, - {0x91, 0xe8}, - {0x91, 0x20}, - {0x92, 0x00}, - {0x93, 0x06}, - {0x93, 0xe3}, - {0x93, 0x02}, - {0x93, 0x02}, - {0x93, 0x00}, - {0x93, 0x04}, - {0x93, 0x00}, - {0x93, 0x03}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x96, 0x00}, - {0x97, 0x08}, - {0x97, 0x19}, - {0x97, 0x02}, - {0x97, 0x0c}, - {0x97, 0x24}, - {0x97, 0x30}, - {0x97, 0x28}, - {0x97, 0x26}, - {0x97, 0x02}, - {0x97, 0x98}, - {0x97, 0x80}, - {0x97, 0x00}, - {0x97, 0x00}, - {0xc3, 0xef}, - {0xff, 0x00}, - {0xba, 0xdc}, - {0xbb, 0x08}, - {0xb6, 0x24}, - {0xb8, 0x33}, - {0xb7, 0x20}, - {0xb9, 0x30}, - {0xb3, 0xb4}, - {0xb4, 0xca}, - {0xb5, 0x43}, - {0xb0, 0x5c}, - {0xb1, 0x4f}, - {0xb2, 0x06}, - {0xc7, 0x00}, - {0xc6, 0x51}, - {0xc5, 0x11}, - {0xc4, 0x9c}, - {0xbf, 0x00}, - {0xbc, 0x64}, - {0xa6, 0x00}, - {0xa7, 0x1e}, - {0xa7, 0x6b}, - {0xa7, 0x47}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x2e}, - {0xa7, 0x85}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x1b}, - {0xa7, 0x74}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x8c, 0x00}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0x7f, 0x00}, - {0xda, 0x00}, - {0xe5, 0x1f}, - {0xe1, 0x67}, - {0xe0, 0x00}, - {0xdd, 0x7f}, - {0x05, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0xe0, 0x00}, - {0xFF, 0x00}, - {0x05, 0x00}, - {0xDA, 0x08}, - {0xda, 0x09}, - {0x98, 0x00}, - {0x99, 0x00}, - {0x00, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x35}, - {0x50, 0x80}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0x78}, - {0x5b, 0x44}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0xe0, 0x00}, -}; - -/* Initialization sequence for VGA resolution (640x480)*/ -const unsigned char OV2640_VGA[][2]= -{ - {0xff, 0x00}, /* Device control register list Table 12 */ - {0x2c, 0xff}, /* Reserved */ - {0x2e, 0xdf}, /* Reserved */ - {0xff, 0x01}, /* Device control register list Table 13 */ - {0x3c, 0x32}, /* Reserved */ - {0x11, 0x00}, /* Clock Rate Control */ - {0x09, 0x02}, /* Common control 2 */ - {0x04, 0xA8}, /* Mirror */ - {0x13, 0xe5}, /* Common control 8 */ - {0x14, 0x48}, /* Common control 9 */ - {0x2c, 0x0c}, /* Reserved */ - {0x33, 0x78}, /* Reserved */ - {0x3a, 0x33}, /* Reserved */ - {0x3b, 0xfB}, /* Reserved */ - {0x3e, 0x00}, /* Reserved */ - {0x43, 0x11}, /* Reserved */ - {0x16, 0x10}, /* Reserved */ - {0x4a, 0x81}, /* Reserved */ - {0x21, 0x99}, /* Reserved */ - {0x24, 0x40}, /* Luminance signal High range */ - {0x25, 0x38}, /* Luminance signal low range */ - {0x26, 0x82}, /* */ - {0x5c, 0x00}, /* Reserved */ - {0x63, 0x00}, /* Reserved */ - {0x46, 0x3f}, /* Frame length adjustment */ - {0x0c, 0x3c}, /* Common control 3 */ - {0x61, 0x70}, /* Histogram algo low level */ - {0x62, 0x80}, /* Histogram algo high level */ - {0x7c, 0x05}, /* Reserved */ - {0x20, 0x80}, /* Reserved */ - {0x28, 0x30}, /* Reserved */ - {0x6c, 0x00}, /* Reserved */ - {0x6d, 0x80}, /* Reserved */ - {0x6e, 0x00}, /* Reserved */ - {0x70, 0x02}, /* Reserved */ - {0x71, 0x94}, /* Reserved */ - {0x73, 0xc1}, /* Reserved */ - {0x3d, 0x34}, /* Reserved */ - {0x5a, 0x57}, /* Reserved */ - {0x12, 0x00}, /* Common control 7 */ - {0x11, 0x00}, /* Clock Rate Control 2*/ - {0x17, 0x11}, /* Horiz window start MSB 8bits */ - {0x18, 0x75}, /* Horiz window end MSB 8bits */ - {0x19, 0x01}, /* Vert window line start MSB 8bits */ - {0x1a, 0x97}, /* Vert window line end MSB 8bits */ - {0x32, 0x36}, - {0x03, 0x0f}, - {0x37, 0x40}, - {0x4f, 0xbb}, - {0x50, 0x9c}, - {0x5a, 0x57}, - {0x6d, 0x80}, - {0x6d, 0x38}, - {0x39, 0x02}, - {0x35, 0x88}, - {0x22, 0x0a}, - {0x37, 0x40}, - {0x23, 0x00}, - {0x34, 0xa0}, - {0x36, 0x1a}, - {0x06, 0x02}, - {0x07, 0xc0}, - {0x0d, 0xb7}, - {0x0e, 0x01}, - {0x4c, 0x00}, - {0xff, 0x00}, - {0xe5, 0x7f}, - {0xf9, 0xc0}, - {0x41, 0x24}, - {0xe0, 0x14}, - {0x76, 0xff}, - {0x33, 0xa0}, - {0x42, 0x20}, - {0x43, 0x18}, - {0x4c, 0x00}, - {0x87, 0xd0}, - {0x88, 0x3f}, - {0xd7, 0x03}, - {0xd9, 0x10}, - {0xd3, 0x82}, - {0xc8, 0x08}, - {0xc9, 0x80}, - {0x7d, 0x00}, - {0x7c, 0x03}, - {0x7d, 0x48}, - {0x7c, 0x08}, - {0x7d, 0x20}, - {0x7d, 0x10}, - {0x7d, 0x0e}, - {0x90, 0x00}, - {0x91, 0x0e}, - {0x91, 0x1a}, - {0x91, 0x31}, - {0x91, 0x5a}, - {0x91, 0x69}, - {0x91, 0x75}, - {0x91, 0x7e}, - {0x91, 0x88}, - {0x91, 0x8f}, - {0x91, 0x96}, - {0x91, 0xa3}, - {0x91, 0xaf}, - {0x91, 0xc4}, - {0x91, 0xd7}, - {0x91, 0xe8}, - {0x91, 0x20}, - {0x92, 0x00}, - {0x93, 0x06}, - {0x93, 0xe3}, - {0x93, 0x02}, - {0x93, 0x02}, - {0x93, 0x00}, - {0x93, 0x04}, - {0x93, 0x00}, - {0x93, 0x03}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x96, 0x00}, - {0x97, 0x08}, - {0x97, 0x19}, - {0x97, 0x02}, - {0x97, 0x0c}, - {0x97, 0x24}, - {0x97, 0x30}, - {0x97, 0x28}, - {0x97, 0x26}, - {0x97, 0x02}, - {0x97, 0x98}, - {0x97, 0x80}, - {0x97, 0x00}, - {0x97, 0x00}, - {0xc3, 0xef}, - {0xff, 0x00}, - {0xba, 0xdc}, - {0xbb, 0x08}, - {0xb6, 0x24}, - {0xb8, 0x33}, - {0xb7, 0x20}, - {0xb9, 0x30}, - {0xb3, 0xb4}, - {0xb4, 0xca}, - {0xb5, 0x43}, - {0xb0, 0x5c}, - {0xb1, 0x4f}, - {0xb2, 0x06}, - {0xc7, 0x00}, - {0xc6, 0x51}, - {0xc5, 0x11}, - {0xc4, 0x9c}, - {0xbf, 0x00}, - {0xbc, 0x64}, - {0xa6, 0x00}, - {0xa7, 0x1e}, - {0xa7, 0x6b}, - {0xa7, 0x47}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x2e}, - {0xa7, 0x85}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x1b}, - {0xa7, 0x74}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x8c, 0x00}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0x7f, 0x00}, - {0xda, 0x00}, - {0xe5, 0x1f}, - {0xe1, 0x67}, - {0xe0, 0x00}, - {0xdd, 0x7f}, - {0x05, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0xe0, 0x00}, - {0xFF, 0x00}, - {0x05, 0x00}, - {0xDA, 0x08}, - {0xda, 0x09}, - {0x98, 0x00}, - {0x99, 0x00}, - {0x00, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x3d}, - {0x50, 0x89}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0xA0}, - {0x5b, 0x78}, - {0x5c, 0x00}, - {0xd3, 0x02}, - {0xe0, 0x00}, -}; - -/* Initialization sequence for QVGA resolution (320x240) */ -const unsigned char OV2640_QVGA[][2]= -{ - {0xff, 0x00}, - {0x2c, 0xff}, - {0x2e, 0xdf}, - {0xff, 0x01}, - {0x3c, 0x32}, - {0x11, 0x00}, - {0x09, 0x02}, - {0x04, 0xA8}, - {0x13, 0xe5}, - {0x14, 0x48}, - {0x2c, 0x0c}, - {0x33, 0x78}, - {0x3a, 0x33}, - {0x3b, 0xfB}, - {0x3e, 0x00}, - {0x43, 0x11}, - {0x16, 0x10}, - {0x4a, 0x81}, - {0x21, 0x99}, - {0x24, 0x40}, - {0x25, 0x38}, - {0x26, 0x82}, - {0x5c, 0x00}, - {0x63, 0x00}, - {0x46, 0x3f}, - {0x0c, 0x3c}, - {0x61, 0x70}, - {0x62, 0x80}, - {0x7c, 0x05}, - {0x20, 0x80}, - {0x28, 0x30}, - {0x6c, 0x00}, - {0x6d, 0x80}, - {0x6e, 0x00}, - {0x70, 0x02}, - {0x71, 0x94}, - {0x73, 0xc1}, - {0x3d, 0x34}, - {0x5a, 0x57}, - {0x12, 0x00}, - {0x11, 0x00}, - {0x17, 0x11}, - {0x18, 0x75}, - {0x19, 0x01}, - {0x1a, 0x97}, - {0x32, 0x36}, - {0x03, 0x0f}, - {0x37, 0x40}, - {0x4f, 0xbb}, - {0x50, 0x9c}, - {0x5a, 0x57}, - {0x6d, 0x80}, - {0x6d, 0x38}, - {0x39, 0x02}, - {0x35, 0x88}, - {0x22, 0x0a}, - {0x37, 0x40}, - {0x23, 0x00}, - {0x34, 0xa0}, - {0x36, 0x1a}, - {0x06, 0x02}, - {0x07, 0xc0}, - {0x0d, 0xb7}, - {0x0e, 0x01}, - {0x4c, 0x00}, - {0xff, 0x00}, - {0xe5, 0x7f}, - {0xf9, 0xc0}, - {0x41, 0x24}, - {0xe0, 0x14}, - {0x76, 0xff}, - {0x33, 0xa0}, - {0x42, 0x20}, - {0x43, 0x18}, - {0x4c, 0x00}, - {0x87, 0xd0}, - {0x88, 0x3f}, - {0xd7, 0x03}, - {0xd9, 0x10}, - {0xd3, 0x82}, - {0xc8, 0x08}, - {0xc9, 0x80}, - {0x7d, 0x00}, - {0x7c, 0x03}, - {0x7d, 0x48}, - {0x7c, 0x08}, - {0x7d, 0x20}, - {0x7d, 0x10}, - {0x7d, 0x0e}, - {0x90, 0x00}, - {0x91, 0x0e}, - {0x91, 0x1a}, - {0x91, 0x31}, - {0x91, 0x5a}, - {0x91, 0x69}, - {0x91, 0x75}, - {0x91, 0x7e}, - {0x91, 0x88}, - {0x91, 0x8f}, - {0x91, 0x96}, - {0x91, 0xa3}, - {0x91, 0xaf}, - {0x91, 0xc4}, - {0x91, 0xd7}, - {0x91, 0xe8}, - {0x91, 0x20}, - {0x92, 0x00}, - {0x93, 0x06}, - {0x93, 0xe3}, - {0x93, 0x02}, - {0x93, 0x02}, - {0x93, 0x00}, - {0x93, 0x04}, - {0x93, 0x00}, - {0x93, 0x03}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x96, 0x00}, - {0x97, 0x08}, - {0x97, 0x19}, - {0x97, 0x02}, - {0x97, 0x0c}, - {0x97, 0x24}, - {0x97, 0x30}, - {0x97, 0x28}, - {0x97, 0x26}, - {0x97, 0x02}, - {0x97, 0x98}, - {0x97, 0x80}, - {0x97, 0x00}, - {0x97, 0x00}, - {0xc3, 0xef}, - {0xff, 0x00}, - {0xba, 0xdc}, - {0xbb, 0x08}, - {0xb6, 0x24}, - {0xb8, 0x33}, - {0xb7, 0x20}, - {0xb9, 0x30}, - {0xb3, 0xb4}, - {0xb4, 0xca}, - {0xb5, 0x43}, - {0xb0, 0x5c}, - {0xb1, 0x4f}, - {0xb2, 0x06}, - {0xc7, 0x00}, - {0xc6, 0x51}, - {0xc5, 0x11}, - {0xc4, 0x9c}, - {0xbf, 0x00}, - {0xbc, 0x64}, - {0xa6, 0x00}, - {0xa7, 0x1e}, - {0xa7, 0x6b}, - {0xa7, 0x47}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x2e}, - {0xa7, 0x85}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x1b}, - {0xa7, 0x74}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x8c, 0x00}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0x7f, 0x00}, - {0xda, 0x00}, - {0xe5, 0x1f}, - {0xe1, 0x67}, - {0xe0, 0x00}, - {0xdd, 0x7f}, - {0x05, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0x50}, - {0x5b, 0x3C}, - {0x5c, 0x00}, - {0xd3, 0x08}, - {0xe0, 0x00}, - {0xFF, 0x00}, - {0x05, 0x00}, - {0xDA, 0x08}, - {0xda, 0x09}, - {0x98, 0x00}, - {0x99, 0x00}, - {0x00, 0x00}, -}; - -/* Initialization sequence for QQVGA resolution (160x120) */ -const char OV2640_QQVGA[][2]= -{ - {0xff, 0x00}, - {0x2c, 0xff}, - {0x2e, 0xdf}, - {0xff, 0x01}, - {0x3c, 0x32}, - {0x11, 0x00}, - {0x09, 0x02}, - {0x04, 0xA8}, - {0x13, 0xe5}, - {0x14, 0x48}, - {0x2c, 0x0c}, - {0x33, 0x78}, - {0x3a, 0x33}, - {0x3b, 0xfB}, - {0x3e, 0x00}, - {0x43, 0x11}, - {0x16, 0x10}, - {0x4a, 0x81}, - {0x21, 0x99}, - {0x24, 0x40}, - {0x25, 0x38}, - {0x26, 0x82}, - {0x5c, 0x00}, - {0x63, 0x00}, - {0x46, 0x3f}, - {0x0c, 0x3c}, - {0x61, 0x70}, - {0x62, 0x80}, - {0x7c, 0x05}, - {0x20, 0x80}, - {0x28, 0x30}, - {0x6c, 0x00}, - {0x6d, 0x80}, - {0x6e, 0x00}, - {0x70, 0x02}, - {0x71, 0x94}, - {0x73, 0xc1}, - {0x3d, 0x34}, - {0x5a, 0x57}, - {0x12, 0x00}, - {0x11, 0x00}, - {0x17, 0x11}, - {0x18, 0x75}, - {0x19, 0x01}, - {0x1a, 0x97}, - {0x32, 0x36}, - {0x03, 0x0f}, - {0x37, 0x40}, - {0x4f, 0xbb}, - {0x50, 0x9c}, - {0x5a, 0x57}, - {0x6d, 0x80}, - {0x6d, 0x38}, - {0x39, 0x02}, - {0x35, 0x88}, - {0x22, 0x0a}, - {0x37, 0x40}, - {0x23, 0x00}, - {0x34, 0xa0}, - {0x36, 0x1a}, - {0x06, 0x02}, - {0x07, 0xc0}, - {0x0d, 0xb7}, - {0x0e, 0x01}, - {0x4c, 0x00}, - {0xff, 0x00}, - {0xe5, 0x7f}, - {0xf9, 0xc0}, - {0x41, 0x24}, - {0xe0, 0x14}, - {0x76, 0xff}, - {0x33, 0xa0}, - {0x42, 0x20}, - {0x43, 0x18}, - {0x4c, 0x00}, - {0x87, 0xd0}, - {0x88, 0x3f}, - {0xd7, 0x03}, - {0xd9, 0x10}, - {0xd3, 0x82}, - {0xc8, 0x08}, - {0xc9, 0x80}, - {0x7d, 0x00}, - {0x7c, 0x03}, - {0x7d, 0x48}, - {0x7c, 0x08}, - {0x7d, 0x20}, - {0x7d, 0x10}, - {0x7d, 0x0e}, - {0x90, 0x00}, - {0x91, 0x0e}, - {0x91, 0x1a}, - {0x91, 0x31}, - {0x91, 0x5a}, - {0x91, 0x69}, - {0x91, 0x75}, - {0x91, 0x7e}, - {0x91, 0x88}, - {0x91, 0x8f}, - {0x91, 0x96}, - {0x91, 0xa3}, - {0x91, 0xaf}, - {0x91, 0xc4}, - {0x91, 0xd7}, - {0x91, 0xe8}, - {0x91, 0x20}, - {0x92, 0x00}, - {0x93, 0x06}, - {0x93, 0xe3}, - {0x93, 0x02}, - {0x93, 0x02}, - {0x93, 0x00}, - {0x93, 0x04}, - {0x93, 0x00}, - {0x93, 0x03}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x93, 0x00}, - {0x96, 0x00}, - {0x97, 0x08}, - {0x97, 0x19}, - {0x97, 0x02}, - {0x97, 0x0c}, - {0x97, 0x24}, - {0x97, 0x30}, - {0x97, 0x28}, - {0x97, 0x26}, - {0x97, 0x02}, - {0x97, 0x98}, - {0x97, 0x80}, - {0x97, 0x00}, - {0x97, 0x00}, - {0xc3, 0xef}, - {0xff, 0x00}, - {0xba, 0xdc}, - {0xbb, 0x08}, - {0xb6, 0x24}, - {0xb8, 0x33}, - {0xb7, 0x20}, - {0xb9, 0x30}, - {0xb3, 0xb4}, - {0xb4, 0xca}, - {0xb5, 0x43}, - {0xb0, 0x5c}, - {0xb1, 0x4f}, - {0xb2, 0x06}, - {0xc7, 0x00}, - {0xc6, 0x51}, - {0xc5, 0x11}, - {0xc4, 0x9c}, - {0xbf, 0x00}, - {0xbc, 0x64}, - {0xa6, 0x00}, - {0xa7, 0x1e}, - {0xa7, 0x6b}, - {0xa7, 0x47}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x2e}, - {0xa7, 0x85}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xa7, 0x1b}, - {0xa7, 0x74}, - {0xa7, 0x42}, - {0xa7, 0x33}, - {0xa7, 0x00}, - {0xa7, 0x23}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x8c, 0x00}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x5a, 0x50}, - {0x5b, 0x3c}, - {0x5c, 0x00}, - {0xd3, 0x04}, - {0x7f, 0x00}, - {0xda, 0x00}, - {0xe5, 0x1f}, - {0xe1, 0x67}, - {0xe0, 0x00}, - {0xdd, 0x7f}, - {0x05, 0x00}, - {0xff, 0x00}, - {0xe0, 0x04}, - {0xc0, 0xc8}, - {0xc1, 0x96}, - {0x86, 0x3d}, - {0x50, 0x92}, - {0x51, 0x90}, - {0x52, 0x2c}, - {0x53, 0x00}, - {0x54, 0x00}, - {0x55, 0x88}, - {0x57, 0x00}, - {0x5a, 0x28}, - {0x5b, 0x1E}, - {0x5c, 0x00}, - {0xd3, 0x08}, - {0xe0, 0x00}, - {0xFF, 0x00}, - {0x05, 0x00}, - {0xDA, 0x08}, - {0xda, 0x09}, - {0x98, 0x00}, - {0x99, 0x00}, - {0x00, 0x00}, -}; - -/** - * @} - */ - -/** @defgroup OV2640_Private_Functions - * @{ - */ - -/** - * @brief Initializes the OV2640 CAMERA component. - * @param DeviceAddr: Device address on communication Bus. - * @param resolution: Camera resolution - * @retval None - */ -void ov2640_Init(uint16_t DeviceAddr, uint32_t resolution) -{ - uint32_t index; - - /* Initialize I2C */ - CAMERA_IO_Init(); - - /* Prepare the camera to be configured */ - CAMERA_IO_Write(DeviceAddr, OV2640_DSP_RA_DLMT, 0x01); - CAMERA_IO_Write(DeviceAddr, OV2640_SENSOR_COM7, 0x80); - CAMERA_Delay(200); - - /* Initialize OV2640 */ - switch (resolution) - { - case CAMERA_R160x120: - { - for(index=0; index<(sizeof(OV2640_QQVGA)/2); index++) - { - CAMERA_IO_Write(DeviceAddr, OV2640_QQVGA[index][0], OV2640_QQVGA[index][1]); - CAMERA_Delay(1); - } - break; - } - case CAMERA_R320x240: - { - for(index=0; index<(sizeof(OV2640_QVGA)/2); index++) - { - CAMERA_IO_Write(DeviceAddr, OV2640_QVGA[index][0], OV2640_QVGA[index][1]); - CAMERA_Delay(1); - } - break; - } - case CAMERA_R480x272: - { - for(index=0; index<(sizeof(OV2640_480x272)/2); index++) - { - CAMERA_IO_Write(DeviceAddr, OV2640_480x272[index][0], OV2640_480x272[index][1]); - CAMERA_Delay(2); - } - break; - } - case CAMERA_R640x480: - { - for(index=0; index<(sizeof(OV2640_VGA)/2); index++) - { - CAMERA_IO_Write(DeviceAddr, OV2640_VGA[index][0], OV2640_VGA[index][1]); - CAMERA_Delay(2); - } - break; - } - default: - { - break; - } - } -} - -/** - * @brief Configures the OV2640 camera feature. - * @param DeviceAddr: Device address on communication Bus. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @param brightness_value: Brightness value to be configured - * @retval None - */ -void ov2640_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t brightness_value) -{ - uint8_t value1, value2; - uint32_t value_tmp; - uint32_t br_value; - - /* Convert the input value into ov2640 parameters */ - value_tmp = ov2640_ConvertValue(feature, value); - br_value = ov2640_ConvertValue(CAMERA_CONTRAST_BRIGHTNESS, brightness_value); - - switch(feature) - { - case CAMERA_BLACK_WHITE: - { - CAMERA_IO_Write(DeviceAddr, 0xff, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7d, value_tmp); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x05); - CAMERA_IO_Write(DeviceAddr, 0x7d, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x7d, 0x80); - break; - } - case CAMERA_CONTRAST_BRIGHTNESS: - { - value1 = (uint8_t)(value_tmp); - value2 = (uint8_t)(value_tmp >> 8); - CAMERA_IO_Write(DeviceAddr, 0xff, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7d, 0x04); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x07); - CAMERA_IO_Write(DeviceAddr, 0x7d, br_value); - CAMERA_IO_Write(DeviceAddr, 0x7d, value1); - CAMERA_IO_Write(DeviceAddr, 0x7d, value2); - CAMERA_IO_Write(DeviceAddr, 0x7d, 0x06); - break; - } - case CAMERA_COLOR_EFFECT: - { - value1 = (uint8_t)(value_tmp); - value2 = (uint8_t)(value_tmp >> 8); - CAMERA_IO_Write(DeviceAddr, 0xff, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x7d, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x7c, 0x05); - CAMERA_IO_Write(DeviceAddr, 0x7d, value1); - CAMERA_IO_Write(DeviceAddr, 0x7d, value2); - break; - } - default: - { - break; - } - } -} - -/** - * @brief Read the OV2640 Camera identity. - * @param DeviceAddr: Device address on communication Bus. - * @retval the OV2640 ID - */ -uint16_t ov2640_ReadID(uint16_t DeviceAddr) -{ - /* Initialize I2C */ - CAMERA_IO_Init(); - - /* Prepare the sensor to read the Camera ID */ - CAMERA_IO_Write(DeviceAddr, OV2640_DSP_RA_DLMT, 0x01); - - /* Get the camera ID */ - return (CAMERA_IO_Read(DeviceAddr, OV2640_SENSOR_PIDH)); -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ -/** - * @brief Convert input values into ov2640 parameters. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @retval The converted value - */ -static uint32_t ov2640_ConvertValue(uint32_t feature, uint32_t value) -{ - uint32_t ret = 0; - - switch(feature) - { - case CAMERA_BLACK_WHITE: - { - switch(value) - { - case CAMERA_BLACK_WHITE_BW: - { - ret = OV2640_BLACK_WHITE_BW; - break; - } - case CAMERA_BLACK_WHITE_NEGATIVE: - { - ret = OV2640_BLACK_WHITE_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_BW_NEGATIVE: - { - ret = OV2640_BLACK_WHITE_BW_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_NORMAL: - { - ret = OV2640_BLACK_WHITE_NORMAL; - break; - } - default: - { - ret = OV2640_BLACK_WHITE_NORMAL; - break; - } - } - break; - } - case CAMERA_CONTRAST_BRIGHTNESS: - { - switch(value) - { - case CAMERA_BRIGHTNESS_LEVEL0: - { - ret = OV2640_BRIGHTNESS_LEVEL0; - break; - } - case CAMERA_BRIGHTNESS_LEVEL1: - { - ret = OV2640_BRIGHTNESS_LEVEL1; - break; - } - case CAMERA_BRIGHTNESS_LEVEL2: - { - ret = OV2640_BRIGHTNESS_LEVEL2; - break; - } - case CAMERA_BRIGHTNESS_LEVEL3: - { - ret = OV2640_BRIGHTNESS_LEVEL3; - break; - } - case CAMERA_BRIGHTNESS_LEVEL4: - { - ret = OV2640_BRIGHTNESS_LEVEL4; - break; - } - case CAMERA_CONTRAST_LEVEL0: - { - ret = OV2640_CONTRAST_LEVEL0; - break; - } - case CAMERA_CONTRAST_LEVEL1: - { - ret = OV2640_CONTRAST_LEVEL1; - break; - } - case CAMERA_CONTRAST_LEVEL2: - { - ret = OV2640_CONTRAST_LEVEL2; - break; - } - case CAMERA_CONTRAST_LEVEL3: - { - ret = OV2640_CONTRAST_LEVEL3; - break; - } - case CAMERA_CONTRAST_LEVEL4: - { - ret = OV2640_CONTRAST_LEVEL4; - break; - } - default: - { - ret = OV2640_CONTRAST_LEVEL0; - break; - } - } - break; - } - case CAMERA_COLOR_EFFECT: - { - switch(value) - { - case CAMERA_COLOR_EFFECT_ANTIQUE: - { - ret = OV2640_COLOR_EFFECT_ANTIQUE; - break; - } - case CAMERA_COLOR_EFFECT_BLUE: - { - ret = OV2640_COLOR_EFFECT_BLUE; - break; - } - case CAMERA_COLOR_EFFECT_GREEN: - { - ret = OV2640_COLOR_EFFECT_GREEN; - break; - } - case CAMERA_COLOR_EFFECT_RED: - { - ret = OV2640_COLOR_EFFECT_RED; - break; - } - default: - { - ret = OV2640_COLOR_EFFECT_RED; - break; - } - } - break; - default: - { - ret = 0; - break; - } - } - } - - return ret; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ov2640/ov2640.h b/Drivers/BSP/Components/ov2640/ov2640.h deleted file mode 100644 index 25633c4ae3..0000000000 --- a/Drivers/BSP/Components/ov2640/ov2640.h +++ /dev/null @@ -1,207 +0,0 @@ -/** - ****************************************************************************** - * @file ov2640.h - * @author MCD Application Team - * @version V1.0.2 - * @date 02-December-2014 - * @brief This file contains all the functions prototypes for the ov2640.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __OV2640_H -#define __OV2640_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ov2640 - * @{ - */ - -/** @defgroup OV2640_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV2640_Exported_Constants - * @{ - */ -/** - * @brief OV2640 ID - */ -#define OV2640_ID 0x26 -/** - * @brief OV2640 Registers - */ -/* OV2640 Registers definition when DSP bank selected (0xFF = 0x00) */ -#define OV2640_DSP_R_BYPASS 0x05 -#define OV2640_DSP_Qs 0x44 -#define OV2640_DSP_CTRL 0x50 -#define OV2640_DSP_HSIZE1 0x51 -#define OV2640_DSP_VSIZE1 0x52 -#define OV2640_DSP_XOFFL 0x53 -#define OV2640_DSP_YOFFL 0x54 -#define OV2640_DSP_VHYX 0x55 -#define OV2640_DSP_DPRP 0x56 -#define OV2640_DSP_TEST 0x57 -#define OV2640_DSP_ZMOW 0x5A -#define OV2640_DSP_ZMOH 0x5B -#define OV2640_DSP_ZMHH 0x5C -#define OV2640_DSP_BPADDR 0x7C -#define OV2640_DSP_BPDATA 0x7D -#define OV2640_DSP_CTRL2 0x86 -#define OV2640_DSP_CTRL3 0x87 -#define OV2640_DSP_SIZEL 0x8C -#define OV2640_DSP_HSIZE2 0xC0 -#define OV2640_DSP_VSIZE2 0xC1 -#define OV2640_DSP_CTRL0 0xC2 -#define OV2640_DSP_CTRL1 0xC3 -#define OV2640_DSP_R_DVP_SP 0xD3 -#define OV2640_DSP_IMAGE_MODE 0xDA -#define OV2640_DSP_RESET 0xE0 -#define OV2640_DSP_MS_SP 0xF0 -#define OV2640_DSP_SS_ID 0x7F -#define OV2640_DSP_SS_CTRL 0xF8 -#define OV2640_DSP_MC_BIST 0xF9 -#define OV2640_DSP_MC_AL 0xFA -#define OV2640_DSP_MC_AH 0xFB -#define OV2640_DSP_MC_D 0xFC -#define OV2640_DSP_P_STATUS 0xFE -#define OV2640_DSP_RA_DLMT 0xFF - -/* OV2640 Registers definition when sensor bank selected (0xFF = 0x01) */ -#define OV2640_SENSOR_GAIN 0x00 -#define OV2640_SENSOR_COM1 0x03 -#define OV2640_SENSOR_REG04 0x04 -#define OV2640_SENSOR_REG08 0x08 -#define OV2640_SENSOR_COM2 0x09 -#define OV2640_SENSOR_PIDH 0x0A -#define OV2640_SENSOR_PIDL 0x0B -#define OV2640_SENSOR_COM3 0x0C -#define OV2640_SENSOR_COM4 0x0D -#define OV2640_SENSOR_AEC 0x10 -#define OV2640_SENSOR_CLKRC 0x11 -#define OV2640_SENSOR_COM7 0x12 -#define OV2640_SENSOR_COM8 0x13 -#define OV2640_SENSOR_COM9 0x14 -#define OV2640_SENSOR_COM10 0x15 -#define OV2640_SENSOR_HREFST 0x17 -#define OV2640_SENSOR_HREFEND 0x18 -#define OV2640_SENSOR_VSTART 0x19 -#define OV2640_SENSOR_VEND 0x1A -#define OV2640_SENSOR_MIDH 0x1C -#define OV2640_SENSOR_MIDL 0x1D -#define OV2640_SENSOR_AEW 0x24 -#define OV2640_SENSOR_AEB 0x25 -#define OV2640_SENSOR_W 0x26 -#define OV2640_SENSOR_REG2A 0x2A -#define OV2640_SENSOR_FRARL 0x2B -#define OV2640_SENSOR_ADDVSL 0x2D -#define OV2640_SENSOR_ADDVHS 0x2E -#define OV2640_SENSOR_YAVG 0x2F -#define OV2640_SENSOR_REG32 0x32 -#define OV2640_SENSOR_ARCOM2 0x34 -#define OV2640_SENSOR_REG45 0x45 -#define OV2640_SENSOR_FLL 0x46 -#define OV2640_SENSOR_FLH 0x47 -#define OV2640_SENSOR_COM19 0x48 -#define OV2640_SENSOR_ZOOMS 0x49 -#define OV2640_SENSOR_COM22 0x4B -#define OV2640_SENSOR_COM25 0x4E -#define OV2640_SENSOR_BD50 0x4F -#define OV2640_SENSOR_BD60 0x50 -#define OV2640_SENSOR_REG5D 0x5D -#define OV2640_SENSOR_REG5E 0x5E -#define OV2640_SENSOR_REG5F 0x5F -#define OV2640_SENSOR_REG60 0x60 -#define OV2640_SENSOR_HISTO_LOW 0x61 -#define OV2640_SENSOR_HISTO_HIGH 0x62 - -/** - * @brief OV2640 Features Parameters - */ -#define OV2640_BRIGHTNESS_LEVEL0 0x40 /* Brightness level -2 */ -#define OV2640_BRIGHTNESS_LEVEL1 0x30 /* Brightness level -1 */ -#define OV2640_BRIGHTNESS_LEVEL2 0x20 /* Brightness level 0 */ -#define OV2640_BRIGHTNESS_LEVEL3 0x10 /* Brightness level +1 */ -#define OV2640_BRIGHTNESS_LEVEL4 0x00 /* Brightness level +2 */ - -#define OV2640_BLACK_WHITE_BW 0x18 /* Black and white effect */ -#define OV2640_BLACK_WHITE_NEGATIVE 0x40 /* Negative effect */ -#define OV2640_BLACK_WHITE_BW_NEGATIVE 0x58 /* BW and Negative effect */ -#define OV2640_BLACK_WHITE_NORMAL 0x00 /* Normal effect */ - -#define OV2640_CONTRAST_LEVEL0 0x3418 /* Contrast level -2 */ -#define OV2640_CONTRAST_LEVEL1 0x2A1C /* Contrast level -2 */ -#define OV2640_CONTRAST_LEVEL2 0x2020 /* Contrast level -2 */ -#define OV2640_CONTRAST_LEVEL3 0x1624 /* Contrast level -2 */ -#define OV2640_CONTRAST_LEVEL4 0x0C28 /* Contrast level -2 */ - -#define OV2640_COLOR_EFFECT_ANTIQUE 0xA640 /* Antique effect */ -#define OV2640_COLOR_EFFECT_BLUE 0x40A0 /* Blue effect */ -#define OV2640_COLOR_EFFECT_GREEN 0x4040 /* Green effect */ -#define OV2640_COLOR_EFFECT_RED 0xC040 /* Red effect */ -/** - * @} - */ - -/** @defgroup OV2640_Exported_Functions - * @{ - */ -void ov2640_Init(uint16_t DeviceAddr, uint32_t resolution); -void ov2640_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t BR_value); -uint16_t ov2640_ReadID(uint16_t DeviceAddr); - -void CAMERA_IO_Init(void); -void CAMERA_IO_Write(uint8_t addr, uint8_t reg, uint8_t value); -uint8_t CAMERA_IO_Read(uint8_t addr, uint8_t reg); -void CAMERA_Delay(uint32_t delay); - -/* CAMERA driver structure */ -extern CAMERA_DrvTypeDef ov2640_drv; -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __OV2640_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ov5640 b/Drivers/BSP/Components/ov5640 new file mode 160000 index 0000000000..f10a25128d --- /dev/null +++ b/Drivers/BSP/Components/ov5640 @@ -0,0 +1 @@ +Subproject commit f10a25128d4208aa2247f5c3f9de809c4ff80c2e diff --git a/Drivers/BSP/Components/ov5640/LICENSE.md b/Drivers/BSP/Components/ov5640/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ov5640/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ov5640/Release_Notes.html b/Drivers/BSP/Components/ov5640/Release_Notes.html deleted file mode 100644 index a5e0cd74ff..0000000000 --- a/Drivers/BSP/Components/ov5640/Release_Notes.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - Release Notes for OV5640 Component Driver - - - - - - -
-
-
-

Release Notes for

-

OV5640 Component Driver

-

Copyright © 2019 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the OV5640 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Official Release of OV5640 Camera Component drivers in line with legacy BSP drivers development guidelines
    -
  • -
  • The component drivers are composed of -
      -
    • component core drivers files: ov5640.h/.c
    • -
  • -
-

Dependencies

-

This software release is compatible with:

-
    -
  • BSP Common version v5.1.2 or lower versions
  • -
-

Backward compatibility

-
    -
  • This software breaks the compatibility with previous version v1.0.0
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First Official Release of OV5640 Camera Component drivers in line with STM32Cube BSP drivers development guidelines (UM2298)
    -
  • -
  • The component drivers are composed of -
      -
    • component core drivers files: ov5640.h/.c
    • -
    • component register drivers files: ov5640_regs.h/.c
    • -
  • -
-

Dependencies

-

This software release is compatible with:

-
    -
  • BSP Common v6.0.0 or above
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ov5640/_htmresc/favicon.png b/Drivers/BSP/Components/ov5640/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ov5640/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ov5640/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ov5640/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ov5640/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ov5640/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ov5640/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ov5640/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ov5640/ov5640.c b/Drivers/BSP/Components/ov5640/ov5640.c deleted file mode 100644 index 0e4326d3be..0000000000 --- a/Drivers/BSP/Components/ov5640/ov5640.c +++ /dev/null @@ -1,1303 +0,0 @@ -/** - ****************************************************************************** - * @file ov5640.c - * @author MCD Application Team - * @brief This file provides the OV5640 camera driver - ****************************************************************************** - * @attention - * - * Copyright (c) 2019 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ov5640.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup OV5640 - * @brief This file provides a set of functions needed to drive the - * OV5640 Camera module. - * @{ - */ - -/** @defgroup OV5640_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV5640_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV5640_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV5640_Private_FunctionPrototypes - * @{ - */ -static uint32_t ov5640_ConvertValue(uint32_t feature, uint32_t value); -/** - * @} - */ - -/** @defgroup OV5640_Private_Variables - * @{ - */ - -CAMERA_DrvTypeDef ov5640_drv = -{ - ov5640_Init, - ov5640_ReadID, - ov5640_Config, -}; - -const uint16_t OV5640_Init[][2] = -{ - {0x3103, 0x11}, - {0x3008, 0x82}, - {0x3103, 0x03}, - {0x3017, 0xFF}, - {0x3018, 0xf3}, - {0x3034, 0x18}, - {0x3008, 0x02}, - {0x3035, 0x41}, - {0x3036, 0x60}, - {0x3037, 0x13}, - {0x3108, 0x01}, - {0x3630, 0x36}, - {0x3631, 0x0e}, - {0x3632, 0xe2}, - {0x3633, 0x12}, - {0x3621, 0xe0}, - {0x3704, 0xa0}, - {0x3703, 0x5a}, - {0x3715, 0x78}, - {0x3717, 0x01}, - {0x370b, 0x60}, - {0x3705, 0x1a}, - {0x3905, 0x02}, - {0x3906, 0x10}, - {0x3901, 0x0a}, - {0x3731, 0x12}, - {0x3600, 0x08}, - {0x3601, 0x33}, - {0x302d, 0x60}, - {0x3620, 0x52}, - {0x371b, 0x20}, - {0x471c, 0x50}, - {0x3a13, 0x43}, - {0x3a18, 0x00}, - {0x3a19, 0xf8}, - {0x3635, 0x13}, - {0x3636, 0x03}, - {0x3634, 0x40}, - {0x3622, 0x01}, - {0x3c01, 0x34}, - {0x3c04, 0x28}, - {0x3c05, 0x98}, - {0x3c06, 0x00}, - {0x3c07, 0x00}, - {0x3c08, 0x01}, - {0x3c09, 0x2c}, - {0x3c0a, 0x9c}, - {0x3c0b, 0x40}, - {0x3820, 0x00}, - {0x3821, 0x06}, - {0x3814, 0x31}, - {0x3815, 0x31}, - {0x3800, 0x00}, - {0x3801, 0x00}, - {0x3802, 0x00}, - {0x3803, 0x04}, - {0x3804, 0x0a}, - {0x3805, 0x3f}, - {0x3806, 0x07}, - {0x3807, 0x9b}, - {0x3808, 0x03}, - {0x3809, 0x20}, - {0x380a, 0x02}, - {0x380b, 0x58}, - {0x380c, 0x07}, - {0x380d, 0x68}, - {0x380e, 0x03}, - {0x380f, 0xd8}, - {0x3810, 0x00}, - {0x3811, 0x10}, - {0x3812, 0x00}, - {0x3813, 0x06}, - {0x3618, 0x00}, - {0x3612, 0x29}, - {0x3708, 0x64}, - {0x3709, 0x52}, - {0x370c, 0x03}, - {0x3a02, 0x03}, - {0x3a03, 0xd8}, - {0x3a08, 0x01}, - {0x3a09, 0x27}, - {0x3a0a, 0x00}, - {0x3a0b, 0xf6}, - {0x3a0e, 0x03}, - {0x3a0d, 0x04}, - {0x3a14, 0x03}, - {0x3a15, 0xd8}, - {0x4001, 0x02}, - {0x4004, 0x02}, - {0x3000, 0x00}, - {0x3002, 0x1c}, - {0x3004, 0xff}, - {0x3006, 0xc3}, - {0x300e, 0x58}, - {0x302e, 0x00}, - {0x4740, 0x20}, - {0x4300, 0x30}, - {0x501f, 0x00}, - {0x4713, 0x03}, - {0x4407, 0x04}, - {0x440e, 0x00}, - {0x460b, 0x35}, - {0x460c, 0x23}, - {0x4837, 0x22}, - {0x3824, 0x02}, - {0x5000, 0xa7}, - {0x5001, 0xa3}, - {0x5180, 0xff}, - {0x5181, 0xf2}, - {0x5182, 0x00}, - {0x5183, 0x14}, - {0x5184, 0x25}, - {0x5185, 0x24}, - {0x5186, 0x09}, - {0x5187, 0x09}, - {0x5188, 0x09}, - {0x5189, 0x75}, - {0x518a, 0x54}, - {0x518b, 0xe0}, - {0x518c, 0xb2}, - {0x518d, 0x42}, - {0x518e, 0x3d}, - {0x518f, 0x56}, - {0x5190, 0x46}, - {0x5191, 0xf8}, - {0x5192, 0x04}, - {0x5193, 0x70}, - {0x5194, 0xf0}, - {0x5195, 0xf0}, - {0x5196, 0x03}, - {0x5197, 0x01}, - {0x5198, 0x04}, - {0x5199, 0x12}, - {0x519a, 0x04}, - {0x519b, 0x00}, - {0x519c, 0x06}, - {0x519d, 0x82}, - {0x519e, 0x38}, - {0x5381, 0x1e}, - {0x5382, 0x5b}, - {0x5383, 0x08}, - {0x5384, 0x0a}, - {0x5385, 0x7e}, - {0x5386, 0x88}, - {0x5387, 0x7c}, - {0x5388, 0x6c}, - {0x5389, 0x10}, - {0x538a, 0x01}, - {0x538b, 0x98}, - {0x5300, 0x08}, - {0x5301, 0x30}, - {0x5302, 0x10}, - {0x5303, 0x00}, - {0x5304, 0x08}, - {0x5305, 0x30}, - {0x5306, 0x08}, - {0x5307, 0x16}, - {0x5309, 0x08}, - {0x530a, 0x30}, - {0x530b, 0x04}, - {0x530c, 0x06}, - {0x5480, 0x01}, - {0x5481, 0x08}, - {0x5482, 0x14}, - {0x5483, 0x28}, - {0x5484, 0x51}, - {0x5485, 0x65}, - {0x5486, 0x71}, - {0x5487, 0x7d}, - {0x5488, 0x87}, - {0x5489, 0x91}, - {0x548a, 0x9a}, - {0x548b, 0xaa}, - {0x548c, 0xb8}, - {0x548d, 0xcd}, - {0x548e, 0xdd}, - {0x548f, 0xea}, - {0x5490, 0x1d}, - {0x5580, 0x02}, - {0x5583, 0x40}, - {0x5584, 0x10}, - {0x5589, 0x10}, - {0x558a, 0x00}, - {0x558b, 0xf8}, - {0x5800, 0x23}, - {0x5801, 0x14}, - {0x5802, 0x0f}, - {0x5803, 0x0f}, - {0x5804, 0x12}, - {0x5805, 0x26}, - {0x5806, 0x0c}, - {0x5807, 0x08}, - {0x5808, 0x05}, - {0x5809, 0x05}, - {0x580a, 0x08}, - {0x580b, 0x0d}, - {0x580c, 0x08}, - {0x580d, 0x03}, - {0x580e, 0x00}, - {0x580f, 0x00}, - {0x5810, 0x03}, - {0x5811, 0x09}, - {0x5812, 0x07}, - {0x5813, 0x03}, - {0x5814, 0x00}, - {0x5815, 0x01}, - {0x5816, 0x03}, - {0x5817, 0x08}, - {0x5818, 0x0d}, - {0x5819, 0x08}, - {0x581a, 0x05}, - {0x581b, 0x06}, - {0x581c, 0x08}, - {0x581d, 0x0e}, - {0x581e, 0x29}, - {0x581f, 0x17}, - {0x5820, 0x11}, - {0x5821, 0x11}, - {0x5822, 0x15}, - {0x5823, 0x28}, - {0x5824, 0x46}, - {0x5825, 0x26}, - {0x5826, 0x08}, - {0x5827, 0x26}, - {0x5828, 0x64}, - {0x5829, 0x26}, - {0x582a, 0x24}, - {0x582b, 0x22}, - {0x582c, 0x24}, - {0x582d, 0x24}, - {0x582e, 0x06}, - {0x582f, 0x22}, - {0x5830, 0x40}, - {0x5831, 0x42}, - {0x5832, 0x24}, - {0x5833, 0x26}, - {0x5834, 0x24}, - {0x5835, 0x22}, - {0x5836, 0x22}, - {0x5837, 0x26}, - {0x5838, 0x44}, - {0x5839, 0x24}, - {0x583a, 0x26}, - {0x583b, 0x28}, - {0x583c, 0x42}, - {0x583d, 0xce}, - {0x5025, 0x00}, - {0x3a0f, 0x30}, - {0x3a10, 0x28}, - {0x3a1b, 0x30}, - {0x3a1e, 0x26}, - {0x3a11, 0x60}, - {0x3a1f, 0x14}, - {0x3008, 0x02}, -}; - -/* Initialization sequence for WVGA resolution (800x480)*/ -const uint16_t OV5640_WVGA[][2]= -{ - {0x3808, 0x03}, - {0x3809, 0x20}, - {0x380a, 0x01}, - {0x380b, 0xE0}, - {0x4300, 0x6F}, - {0x4740, 0x22}, - {0x501F, 0x01}, -}; - -/* Initialization sequence for VGA resolution (640x480)*/ -const uint16_t OV5640_VGA[][2]= -{ - {0x3808, 0x02}, - {0x3809, 0x80}, - {0x380a, 0x01}, - {0x380b, 0xE0}, - {0x4300, 0x6F}, - {0x4740, 0x22}, - {0x501F, 0x01}, -}; - -/* Initialization sequence for 480x272 resolution */ -const uint16_t OV5640_480x272[][2]= -{ - {0x3808, 0x01}, - {0x3809, 0xE0}, - {0x380a, 0x01}, - {0x380b, 0x10}, - {0x4300, 0x6F}, - {0x4740, 0x22}, - {0x501f, 0x01}, -}; - -const uint16_t OV5640_QVGA[][2] = -{ - {0x3808, 0x01}, - {0x3809, 0x40}, - {0x380a, 0x00}, - {0x380b, 0xF0}, - {0x4300, 0x6F}, - {0x4740, 0x22}, - {0x501f, 0x01}, -}; - -/* Initialization sequence for QQVGA resolution (160x120) */ -const uint16_t OV5640_QQVGA[][2]= -{ - {0x3808, 0x00}, - {0x3809, 0xA0}, - {0x380a, 0x00}, - {0x380b, 0x78}, - {0x4300, 0x6F}, - {0x4740, 0x22}, - {0x501f, 0x01}, -}; - -/* OV5640 Light Mode setting */ -const uint16_t OV5640_LightModeAuto[][2]= -{ - {0x3406, 0x00}, - {0x3400, 0x04}, - {0x3401, 0x00}, - {0x3402, 0x04}, - {0x3403, 0x00}, - {0x3404, 0x04}, - {0x3405, 0x00}, -}; - -const uint16_t OV5640_LightModeCloudy[][2]= -{ - {0x3406, 0x01}, - {0x3400, 0x06}, - {0x3401, 0x48}, - {0x3402, 0x04}, - {0x3403, 0x00}, - {0x3404, 0x04}, - {0x3405, 0xd3}, -}; - -const uint16_t OV5640_LightModeOffice[][2]= -{ - {0x3406, 0x01}, - {0x3400, 0x05}, - {0x3401, 0x48}, - {0x3402, 0x04}, - {0x3403, 0x00}, - {0x3404, 0x07}, - {0x3405, 0xcf}, -}; - -const uint16_t OV5640_LightModeHome[][2]= -{ - {0x3406, 0x01}, - {0x3400, 0x04}, - {0x3401, 0x10}, - {0x3402, 0x04}, - {0x3403, 0x00}, - {0x3404, 0x08}, - {0x3405, 0xB6}, -}; - -const uint16_t OV5640_LightModeSunny[][2]= -{ - {0x3406, 0x01}, - {0x3400, 0x06}, - {0x3401, 0x1c}, - {0x3402, 0x04}, - {0x3403, 0x00}, - {0x3404, 0x04}, - {0x3405, 0xf3}, -}; - -/** - * @} - */ - - -/** - * @brief Initializes the OV5640 CAMERA component. - * @param DeviceAddr: Device address on communication Bus. - * @param resolution: Camera resolution - * @retval None - */ -void ov5640_Init(uint16_t DeviceAddr, uint32_t resolution) -{ - uint32_t index = 0; - - for(index=0; index< (sizeof(OV5640_Init)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_Init[index][0], OV5640_Init[index][1]); - } - - /* Initialize OV5640 */ - switch (resolution) - { - case CAMERA_R160x120: - { - for(index=0; index<(sizeof(OV5640_QQVGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_QQVGA[index][0], OV5640_QQVGA[index][1]); - } - break; - } - case CAMERA_R320x240: - { - for(index=0; index< (sizeof(OV5640_QVGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_QVGA[index][0], OV5640_QVGA[index][1]); - } - - break; - } - case CAMERA_R480x272: - { - for(index=0; index<(sizeof(OV5640_480x272)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_480x272[index][0], OV5640_480x272[index][1]); - } - break; - } - case CAMERA_R640x480: - { - for(index=0; index<(sizeof(OV5640_VGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_VGA[index][0], OV5640_VGA[index][1]); - } - break; - } - default: - { - break; - } - } -} - -/** - * @brief Set the OV5640 camera Light Mode. - * @param DeviceAddr : Device address on communication Bus. - * @param Effect : Effect to be configured - * @retval None - */ -void OV5640_SetLightMode(uint16_t DeviceAddr, uint8_t LightMode) -{ - uint32_t index = 0; - - CAMERA_IO_Write(DeviceAddr, 0x3406, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5190, 0x46); - CAMERA_IO_Write(DeviceAddr, 0x5191, 0xf8); - CAMERA_IO_Write(DeviceAddr, 0x5192, 0x04); - - switch(LightMode) - { - case OV5640_LIGHT_AUTO: - for(index=0; index< (sizeof(OV5640_LightModeAuto)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeAuto[index][0], OV5640_LightModeAuto[index][1]); - } - break; - case OV5640_LIGHT_SUNNY: - for(index=0; index< (sizeof(OV5640_LightModeSunny)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeSunny[index][0], OV5640_LightModeSunny[index][1]); - } - break; - case OV5640_LIGHT_OFFICE: - for(index=0; index< (sizeof(OV5640_LightModeOffice)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeOffice[index][0], OV5640_LightModeOffice[index][1]); - } - break; - case OV5640_LIGHT_CLOUDY: - for(index=0; index< (sizeof(OV5640_LightModeCloudy)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeCloudy[index][0], OV5640_LightModeCloudy[index][1]); - } - break; - case OV5640_LIGHT_HOME: - for(index=0; index< (sizeof(OV5640_LightModeHome)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeHome[index][0], OV5640_LightModeHome[index][1]); - } - break; - default : - /* Auto light mode used */ - for(index=0; index< (sizeof(OV5640_LightModeAuto)/4) ; index++) - { - CAMERA_IO_Write(DeviceAddr, OV5640_LightModeAuto[index][0], OV5640_LightModeAuto[index][1]); - } - break; - } -} - -/** - * @brief Set the OV5640 camera Special Effect. - * @param DeviceAddr: Device address on communication Bus. - * @param Effect: Effect to be configured - * @retval None - */ -void OV5640_SetEffect(uint16_t DeviceAddr, uint32_t Effect) -{ - switch(Effect) - { - case OV5640_COLOR_EFFECT_NONE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0x7F); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x00); - break; - - case OV5640_COLOR_EFFECT_BLUE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0xA0); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x40); - break; - - case OV5640_COLOR_EFFECT_RED: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0xC0); - break; - - case OV5640_COLOR_EFFECT_GREEN: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x60); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x60); - break; - - case OV5640_COLOR_EFFECT_BW: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x80); - break; - - case OV5640_COLOR_EFFECT_SEPIA: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0xA0); - break; - - case OV5640_COLOR_EFFECT_NEGATIVE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x40); - break; - - case OV5640_COLOR_EFFECT_BW_NEGATIVE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x58); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x40); - break; - - case OV5640_COLOR_EFFECT_OVEREXPOSURE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0xF0); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0xF0); - break; - - case OV5640_COLOR_EFFECT_SOLARIZE: - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x06); - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x10); - CAMERA_IO_Write(DeviceAddr, 0x5003, 0x09); - break; - - default : - /* No effect */ - CAMERA_IO_Write(DeviceAddr, 0x5001, 0x7F); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x00); - break; - } -} - -/** - * @brief Set the OV5640 camera Brightness Level. - * @note The brightness of OV5640 could be adjusted. Higher brightness will - * make the picture more bright. The side effect of higher brightness - * is the picture looks foggy. - * @param DeviceAddr: Device address on communication Bus. - * @param Level: Value to be configured - * @retval None - */ -void OV5640_SetBrightness(uint16_t DeviceAddr, uint8_t Level) -{ - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - - switch(Level) - { - case OV5640_BRIGHTNESS_LEVEL4P: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x40); - break; - - case OV5640_BRIGHTNESS_LEVEL3P: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x30); - break; - - case OV5640_BRIGHTNESS_LEVEL2P: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x20); - break; - - case OV5640_BRIGHTNESS_LEVEL1P: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x10); - break; - - case OV5640_BRIGHTNESS_LEVEL0: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x00); - break; - - case OV5640_BRIGHTNESS_LEVEL1N: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x10); - break; - - case OV5640_BRIGHTNESS_LEVEL2N: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x20); - break; - - case OV5640_BRIGHTNESS_LEVEL3N: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x30); - break; - - case OV5640_BRIGHTNESS_LEVEL4N: - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x40); - break; - - default: - /* Level 0 as default */ - Level = OV5640_BRIGHTNESS_LEVEL0; - CAMERA_IO_Write(DeviceAddr, 0x5587, 0x00); - break; - } - - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x04); - - if(Level < OV5640_SATURATION_LEVEL1N) - { - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x01); - } - else - { - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x09); - } -} - -/** - * @brief Set the OV5640 camera Saturation Level. - * @note The color saturation of OV5640 could be adjusted. High color saturation - * would make the picture looks more vivid, but the side effect is the - * bigger noise and not accurate skin color. - * @param DeviceAddr: Device address on communication Bus. - * @param Level: Value to be configured - * @retval None - */ -void OV5640_SetSaturation(uint16_t DeviceAddr, uint8_t Level) -{ - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - - switch(Level) - { - case OV5640_SATURATION_LEVEL4P: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x40); - break; - - case OV5640_SATURATION_LEVEL3P: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x50); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x50); - break; - - case OV5640_SATURATION_LEVEL2P: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x60); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x60); - break; - - case OV5640_SATURATION_LEVEL1P: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x70); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x70); - break; - - case OV5640_SATURATION_LEVEL0: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x80); - break; - - case OV5640_SATURATION_LEVEL1N: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x30); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x30); - break; - - case OV5640_SATURATION_LEVEL2N: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x20); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x20); - break; - - case OV5640_SATURATION_LEVEL3N: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x10); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x10); - break; - - case OV5640_SATURATION_LEVEL4N: - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x00); - break; - - default: - /* Level 0 as default */ - CAMERA_IO_Write(DeviceAddr, 0x5583, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5584, 0x40); - break; - } - - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x02); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x41); -} - -/** - * @brief Set the OV5640 camera Contrast Level. - * @note The contrast of OV5640 could be adjusted. Higher contrast will make - * the picture sharp. But the side effect is loosing dynamic range. - * @param DeviceAddr: Device address on communication Bus. - * @param Level: Value to be configured - * @retval None - */ -void OV5640_SetContrast(uint16_t DeviceAddr, uint8_t Level) -{ - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x04); - - switch(Level) - { - case OV5640_CONTRAST_LEVEL4P: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x30); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x30); - break; - - case OV5640_CONTRAST_LEVEL3P: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x2C); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x2C); - break; - - case OV5640_CONTRAST_LEVEL2P: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x28); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x28); - break; - - case OV5640_CONTRAST_LEVEL1P: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x24); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x24); - break; - - case OV5640_CONTRAST_LEVEL0: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x20); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x20); - break; - - case OV5640_CONTRAST_LEVEL1N: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x1C); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x1C); - break; - - case OV5640_CONTRAST_LEVEL2N: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x18); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x18); - break; - - case OV5640_CONTRAST_LEVEL3N: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x14); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x14); - break; - - case OV5640_CONTRAST_LEVEL4N: - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x10); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x10); - break; - - default: - /* Level 0 as default */ - CAMERA_IO_Write(DeviceAddr, 0x5586, 0x20); - CAMERA_IO_Write(DeviceAddr, 0x5585, 0x20); - break; - } - - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x41); -} - -/** - * @brief Set the OV5640 camera Hue degree. - * @param DeviceAddr: Device address on communication Bus. - * @param Level: Value to be configured - * @retval None - */ -void OV5640_SetHueDegree(uint16_t DeviceAddr, uint16_t Degree) -{ - CAMERA_IO_Write(DeviceAddr, 0x5001, 0xFF); - CAMERA_IO_Write(DeviceAddr, 0x5580, 0x01); - - switch(Degree) - { - case OV5640_HUE_150P: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x31); - break; - - case OV5640_HUE_120P: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x31); - break; - - case OV5640_HUE_90P: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x31); - break; - - case OV5640_HUE_60P: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x01); - break; - - case OV5640_HUE_30P: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x01); - break; - - case OV5640_HUE_0: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x01); - break; - - case OV5640_HUE_30N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x02); - break; - - case OV5640_HUE_60N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x02); - break; - - case OV5640_HUE_90N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x02); - break; - - case OV5640_HUE_120N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x32); - break; - - case OV5640_HUE_150N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x6F); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x40); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x32); - break; - - case OV5640_HUE_180N: - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x32); - break; - - default: - /* Hue degree 0 as default */ - CAMERA_IO_Write(DeviceAddr, 0x5581, 0x80); - CAMERA_IO_Write(DeviceAddr, 0x5582, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5588, 0x01); - break; - } -} - -/** - * @brief Control OV5640 camera mirror/vflip. - * @param DeviceAddr: Device address on communication Bus. - * @param Config: To configure mirror, flip, both or nothing - * @retval None - */ -void OV5640_MirrorFlipConfig(uint16_t DeviceAddr, uint8_t Config) -{ - uint8_t tmp3820 = 0, tmp3821; - - tmp3820 = CAMERA_IO_Read(DeviceAddr, 0x3820); - tmp3820 &= 0xF9; - tmp3821 = CAMERA_IO_Read(DeviceAddr, 0x3821); - tmp3821 &= 0xF9; - - switch (Config) - { - case OV5640_MIRROR: - CAMERA_IO_Write(DeviceAddr, 0x3820, tmp3820 | 0x00); - CAMERA_IO_Write(DeviceAddr, 0x3821, tmp3821 | 0x06); - break; - - case OV5640_FLIP: - CAMERA_IO_Write(DeviceAddr, 0x3820, tmp3820 | 0x06); - CAMERA_IO_Write(DeviceAddr, 0x3821, tmp3821 | 0x00); - break; - case OV5640_MIRROR_FLIP: - CAMERA_IO_Write(DeviceAddr, 0x3820, tmp3820 | 0x06); - CAMERA_IO_Write(DeviceAddr, 0x3821, tmp3821 | 0x06); - break; - - case OV5640_MIRROR_FLIP_NORMAL: - CAMERA_IO_Write(DeviceAddr, 0x3820, tmp3820 | 0x00); - CAMERA_IO_Write(DeviceAddr, 0x3821, tmp3821 | 0x06); - break; - - default: - CAMERA_IO_Write(DeviceAddr, 0x3820, tmp3820 | 0x00); - CAMERA_IO_Write(DeviceAddr, 0x3821, tmp3821 | 0x00); - break; - } -} - -/** - * @brief Control OV5640 camera mirror/vflip. - * @param DeviceAddr: Device address on communication Bus. - * @param Zoom: Zoom to be configured - * @retval None - */ -void OV5640_ZoomConfig(uint16_t DeviceAddr, uint8_t Zoom) -{ - int32_t res = 0; - - /* Get camera resolution */ - res = OV5640_GetResolution(DeviceAddr); - - if(Zoom == OV5640_ZOOM_x1) - { - CAMERA_IO_Write(DeviceAddr, 0x5600, 0x10); - } - else - { - switch (res) - { - case CAMERA_R320x240: - case CAMERA_R480x272: - Zoom = Zoom >> 1; - break; - case CAMERA_R640x480: - Zoom = Zoom >> 2; - break; - default: - break; - } - - CAMERA_IO_Write(DeviceAddr, 0x5600, 0x00); - CAMERA_IO_Write(DeviceAddr, 0x5601, Zoom); - } -} - -/** - * @brief Get OV5640 camera resolution. - * @param DeviceAddr: Device address on communication Bus. - * @retval Camera resolution else 0xFF - */ -int32_t OV5640_GetResolution(uint16_t DeviceAddr) -{ - uint16_t x_size = 0, y_size = 0; - int32_t res = CAMERA_R640x480; - - x_size = CAMERA_IO_Read(DeviceAddr, 0x3808) << 8; - x_size |= CAMERA_IO_Read(DeviceAddr, 0x3809); - y_size = CAMERA_IO_Read(DeviceAddr, 0x380A) << 8; - y_size |= CAMERA_IO_Read(DeviceAddr, 0x380B); - - if((x_size == 640) && (y_size == 480)) - { - res = CAMERA_R640x480; - } - else if((x_size == 480) && (y_size == 272)) - { - res = CAMERA_R480x272; - } - else if((x_size == 320) && (y_size == 240)) - { - res = CAMERA_R320x240; - } - else if((x_size == 160) && (y_size == 120)) - { - res = CAMERA_R160x120; - } - else - { - res = 0xFF; - } - return res; -} - -/** - * @brief Configures the OV5640 camera feature. - * @param DeviceAddr: Device address on communication Bus. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @param brightness_value: Brightness value to be configured - * @retval None - */ -void ov5640_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t brightness_value) -{ - uint32_t value_tmp; - uint32_t br_value; - - /* Convert the input value into ov5640 parameters */ - value_tmp = ov5640_ConvertValue(feature, value); - br_value = ov5640_ConvertValue(CAMERA_CONTRAST_BRIGHTNESS, brightness_value); - - switch(feature) - { - case CAMERA_CONTRAST_BRIGHTNESS: - { - OV5640_SetContrast(DeviceAddr, value_tmp); - OV5640_SetBrightness(DeviceAddr, br_value); - break; - } - case CAMERA_BLACK_WHITE: - case CAMERA_COLOR_EFFECT: - { - OV5640_SetEffect(DeviceAddr, value_tmp); - break; - } - default: - { - break; - } - } -} - -/** - * @brief Read the OV5640 Camera identity. - * @param DeviceAddr: Device address on communication Bus. - * @retval the OV5640 ID - */ -uint16_t ov5640_ReadID(uint16_t DeviceAddr) -{ - uint16_t read_val = 0; - - /* Initialize I2C */ - CAMERA_IO_Init(); - - /* Prepare the camera to be configured */ - CAMERA_IO_Write(DeviceAddr, 0x3008, 0x80); - CAMERA_Delay(500); - - read_val = CAMERA_IO_Read(DeviceAddr, 0x300A); - read_val = read_val << 8; - read_val |= CAMERA_IO_Read(DeviceAddr, 0x300B); - /* Get the camera ID */ - return read_val; -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ -/** - * @brief Convert input values into ov5640 parameters. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @retval The converted value - */ -static uint32_t ov5640_ConvertValue(uint32_t feature, uint32_t value) -{ - uint32_t ret = 0; - - switch(feature) - { - case CAMERA_BLACK_WHITE: - { - switch(value) - { - case CAMERA_BLACK_WHITE_BW: - { - ret = OV5640_COLOR_EFFECT_BW; - break; - } - case CAMERA_BLACK_WHITE_NEGATIVE: - { - ret = OV5640_COLOR_EFFECT_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_BW_NEGATIVE: - { - ret = OV5640_COLOR_EFFECT_BW_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_NORMAL: - default: - { - ret = OV5640_COLOR_EFFECT_NONE; - break; - } - } - break; - } - case CAMERA_CONTRAST_BRIGHTNESS: - { - switch(value) - { - case CAMERA_BRIGHTNESS_LEVEL0: - { - ret = OV5640_BRIGHTNESS_LEVEL4N; - break; - } - case CAMERA_BRIGHTNESS_LEVEL1: - { - ret = OV5640_BRIGHTNESS_LEVEL2N; - break; - } - case CAMERA_BRIGHTNESS_LEVEL2: - { - ret = OV5640_BRIGHTNESS_LEVEL0; - break; - } - case CAMERA_BRIGHTNESS_LEVEL3: - { - ret = OV5640_BRIGHTNESS_LEVEL2P; - break; - } - case CAMERA_BRIGHTNESS_LEVEL4: - { - ret = OV5640_BRIGHTNESS_LEVEL4P; - break; - } - case CAMERA_CONTRAST_LEVEL0: - { - ret = OV5640_CONTRAST_LEVEL4N; - break; - } - case CAMERA_CONTRAST_LEVEL1: - { - ret = OV5640_CONTRAST_LEVEL2N; - break; - } - case CAMERA_CONTRAST_LEVEL2: - { - ret = OV5640_CONTRAST_LEVEL0; - break; - } - case CAMERA_CONTRAST_LEVEL3: - { - ret = OV5640_CONTRAST_LEVEL2P; - break; - } - case CAMERA_CONTRAST_LEVEL4: - { - ret = OV5640_CONTRAST_LEVEL4P; - break; - } - default: - { - ret = OV5640_CONTRAST_LEVEL0; - break; - } - } - break; - } - case CAMERA_COLOR_EFFECT: - { - switch(value) - { - case CAMERA_COLOR_EFFECT_ANTIQUE: - { - ret = OV5640_COLOR_EFFECT_SEPIA; - break; - } - case CAMERA_COLOR_EFFECT_BLUE: - { - ret = OV5640_COLOR_EFFECT_BLUE; - break; - } - case CAMERA_COLOR_EFFECT_GREEN: - { - ret = OV5640_COLOR_EFFECT_GREEN; - break; - } - case CAMERA_COLOR_EFFECT_RED: - { - ret = OV5640_COLOR_EFFECT_RED; - break; - } - case CAMERA_COLOR_EFFECT_NONE: - default: - { - ret = OV5640_COLOR_EFFECT_NONE; - break; - } - } - break; - default: - { - ret = 0; - break; - } - } - } - - return ret; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ov5640/ov5640.h b/Drivers/BSP/Components/ov5640/ov5640.h deleted file mode 100644 index c281e66a43..0000000000 --- a/Drivers/BSP/Components/ov5640/ov5640.h +++ /dev/null @@ -1,202 +0,0 @@ -/** - ****************************************************************************** - * @file ov5640.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the ov5640.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2019 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __OV5640_H -#define __OV5640_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ov5640 - * @{ - */ - -/** @defgroup OV5640_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup OV5640_Exported_Constants - * @{ - */ -/** - * @brief OV5640 ID - */ -#define OV5640_ID 0x5640 -/** - * @brief OV5640 Registers - */ - - -/** - * @brief OV5640 Features Parameters - */ - -/* Brightness */ -#define OV5640_BRIGHTNESS_LEVEL4P 0x00 /* Brightness level +4 */ -#define OV5640_BRIGHTNESS_LEVEL3P 0x01 /* Brightness level +3 */ -#define OV5640_BRIGHTNESS_LEVEL2P 0x02 /* Brightness level +2 */ -#define OV5640_BRIGHTNESS_LEVEL1P 0x04 /* Brightness level +1 */ -#define OV5640_BRIGHTNESS_LEVEL0 0x08 /* Brightness level 0 */ -#define OV5640_BRIGHTNESS_LEVEL1N 0x10 /* Brightness level -1 */ -#define OV5640_BRIGHTNESS_LEVEL2N 0x20 /* Brightness level -2 */ -#define OV5640_BRIGHTNESS_LEVEL3N 0x40 /* Brightness level -3 */ -#define OV5640_BRIGHTNESS_LEVEL4N 0x80 /* Brightness level -4 */ - -/* Saturation */ -#define OV5640_SATURATION_LEVEL4P 0x00 /* Saturation level +4 */ -#define OV5640_SATURATION_LEVEL3P 0x01 /* Saturation level +3 */ -#define OV5640_SATURATION_LEVEL2P 0x02 /* Saturation level +2 */ -#define OV5640_SATURATION_LEVEL1P 0x04 /* Saturation level +1 */ -#define OV5640_SATURATION_LEVEL0 0x08 /* Saturation level 0 */ -#define OV5640_SATURATION_LEVEL1N 0x10 /* Saturation level -1 */ -#define OV5640_SATURATION_LEVEL2N 0x20 /* Saturation level -2 */ -#define OV5640_SATURATION_LEVEL3N 0x40 /* Saturation level -3 */ -#define OV5640_SATURATION_LEVEL4N 0x80 /* Saturation level -4 */ - -/* Contrast */ -#define OV5640_CONTRAST_LEVEL4P 0x00 /* Contrast level +4 */ -#define OV5640_CONTRAST_LEVEL3P 0x01 /* Contrast level +3 */ -#define OV5640_CONTRAST_LEVEL2P 0x02 /* Contrast level +2 */ -#define OV5640_CONTRAST_LEVEL1P 0x04 /* Contrast level +1 */ -#define OV5640_CONTRAST_LEVEL0 0x08 /* Contrast level 0 */ -#define OV5640_CONTRAST_LEVEL1N 0x10 /* Contrast level -1 */ -#define OV5640_CONTRAST_LEVEL2N 0x20 /* Contrast level -2 */ -#define OV5640_CONTRAST_LEVEL3N 0x40 /* Contrast level -3 */ -#define OV5640_CONTRAST_LEVEL4N 0x80 /* Contrast level -4 */ - - -/* Hue Control */ -#define OV5640_HUE_150P 0x0001 /* Hue 150+ degree */ -#define OV5640_HUE_120P 0x0002 /* Hue 120+ degree */ -#define OV5640_HUE_90P 0x0004 /* Hue 90+ degree */ -#define OV5640_HUE_60P 0x0008 /* Hue 60+ degree */ -#define OV5640_HUE_30P 0x0010 /* Hue 30+ degree */ -#define OV5640_HUE_0 0x0020 /* Hue 0 degree */ -#define OV5640_HUE_30N 0x0040 /* Hue 30- degree */ -#define OV5640_HUE_60N 0x0080 /* Hue 60- degree */ -#define OV5640_HUE_90N 0x0100 /* Hue 90- degree */ -#define OV5640_HUE_120N 0x0200 /* Hue 120- degree */ -#define OV5640_HUE_150N 0x0400 /* Hue 150- degree */ -#define OV5640_HUE_180N 0x0800 /* Hue 180- degree */ - -/* Mirror/Flip */ -#define OV5640_MIRROR 0x00 /* Set camera mirror config */ -#define OV5640_FLIP 0x01 /* Set camera flip config */ -#define OV5640_MIRROR_FLIP 0x02 /* Set camera mirror and flip */ -#define OV5640_MIRROR_FLIP_NORMAL 0x04 /* Set camera normal mode */ - -/* Zoom */ -#define OV5640_ZOOM_x8 0x00 -#define OV5640_ZOOM_x4 0x11 -#define OV5640_ZOOM_x2 0x22 -#define OV5640_ZOOM_x1 0x44 - -/* Special Effect */ -#define OV5640_COLOR_EFFECT_NONE 0x00 /* No effect */ -#define OV5640_COLOR_EFFECT_BLUE 0x01 /* Blue effect */ -#define OV5640_COLOR_EFFECT_RED 0x02 /* Red effect */ -#define OV5640_COLOR_EFFECT_GREEN 0x04 /* Green effect */ -#define OV5640_COLOR_EFFECT_BW 0x08 /* Black and White effect */ -#define OV5640_COLOR_EFFECT_SEPIA 0x10 /* Sepia effect */ -#define OV5640_COLOR_EFFECT_NEGATIVE 0x20 /* Negative effect */ -#define OV5640_COLOR_EFFECT_BW_NEGATIVE 0x40 /* BW Negative effect */ -#define OV5640_COLOR_EFFECT_OVEREXPOSURE 0x80 /* Over exposure effect */ -#define OV5640_COLOR_EFFECT_SOLARIZE 0x100 /* Solarized effect */ - -/* Light Mode */ -#define OV5640_LIGHT_AUTO 0x00 /* Light Mode Auto */ -#define OV5640_LIGHT_SUNNY 0x01 /* Light Mode Sunny */ -#define OV5640_LIGHT_OFFICE 0x02 /* Light Mode Office */ -#define OV5640_LIGHT_HOME 0x04 /* Light Mode Home */ -#define OV5640_LIGHT_CLOUDY 0x08 /* Light Mode Claudy */ - -/* Saturation */ -#define OV5640_SATURATION_0 0x00 /* Color saturation 0 */ -#define OV5640_SATURATION_1 0x01 /* Color saturation 1 */ -#define OV5640_SATURATION_2 0x02 /* Color saturation 2 */ -#define OV5640_SATURATION_3 0x04 /* Color saturation 3 */ - -/* Exposure */ -#define OV5640_EXPOSURE_LEVEL_0 0x00 /* Exposure Level 0 */ -#define OV5640_EXPOSURE_LEVEL_1 0x01 /* Exposure Level 1 */ -#define OV5640_EXPOSURE_LEVEL_2 0x02 /* Exposure Level 2 */ -#define OV5640_EXPOSURE_LEVEL_3 0x04 /* Exposure Level 3 */ - -/** - * @} - */ - -/** @defgroup OV5640_Exported_Functions - * @{ - */ -void ov5640_Init(uint16_t DeviceAddr, uint32_t resolution); -void ov5640_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t BR_value); -uint16_t ov5640_ReadID(uint16_t DeviceAddr); -void OV5640_SetLightMode(uint16_t DeviceAddr, uint8_t LightMode); -void OV5640_SetEffect(uint16_t DeviceAddr, uint32_t Effect); -void OV5640_SetBrightness(uint16_t DeviceAddr, uint8_t Level); -void OV5640_SetSaturation(uint16_t DeviceAddr, uint8_t Level); -void OV5640_SetContrast(uint16_t DeviceAddr, uint8_t Level); -void OV5640_SetHueDegree(uint16_t DeviceAddr, uint16_t Degree); -void OV5640_MirrorFlipConfig(uint16_t DeviceAddr, uint8_t Config); -void OV5640_ZoomConfig(uint16_t DeviceAddr, uint8_t Zoom); -int32_t OV5640_GetResolution(uint16_t DeviceAddr); -void CAMERA_IO_Init(void); -void CAMERA_IO_Write(uint8_t addr, uint16_t reg, uint16_t value); -uint16_t CAMERA_IO_Read(uint8_t Addr, uint16_t Reg); -void CAMERA_Delay(uint32_t delay); - -/* CAMERA driver structure */ -extern CAMERA_DrvTypeDef ov5640_drv; -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __OV5640_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/s25fl512s b/Drivers/BSP/Components/s25fl512s new file mode 160000 index 0000000000..2108b81638 --- /dev/null +++ b/Drivers/BSP/Components/s25fl512s @@ -0,0 +1 @@ +Subproject commit 2108b81638494f585b45b554f7ff82f457f127b7 diff --git a/Drivers/BSP/Components/s25fl512s/LICENSE.md b/Drivers/BSP/Components/s25fl512s/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/s25fl512s/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/s25fl512s/Release_Notes.html b/Drivers/BSP/Components/s25fl512s/Release_Notes.html deleted file mode 100644 index 8cd81e1722..0000000000 --- a/Drivers/BSP/Components/s25fl512s/Release_Notes.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - Release Notes for S25FL512S Component Driver - - - - - - -
-
-
-

Release Notes for

-

S25FL512S Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the S25FL512S Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First Official Release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/s25fl512s/_htmresc/favicon.png b/Drivers/BSP/Components/s25fl512s/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/s25fl512s/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/s25fl512s/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/s25fl512s/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/s25fl512s/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/s25fl512s/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/s25fl512s/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/s25fl512s/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/s25fl512s/s25fl512s.h b/Drivers/BSP/Components/s25fl512s/s25fl512s.h deleted file mode 100644 index f9b5005d04..0000000000 --- a/Drivers/BSP/Components/s25fl512s/s25fl512s.h +++ /dev/null @@ -1,242 +0,0 @@ -/** - ****************************************************************************** - * @file s25fl512s.h - * @author MCD Application Team - * @version V1.0.0 - * @date 03-August-2015 - * @brief This file contains all the description of the S25FL512S QSPI memory. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __S25FL512S_H -#define __S25FL512S_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup s25fl512s - * @brief This file provides a set of definitions for the Spansion - * S25FL512S memory (configuration, commands, registers). - * @{ - */ - -/** @defgroup S25FL512S_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup S25FL512S_Exported_Constants - * @{ - */ - -/* S25FL512SAGMFI01 Spansion Memory */ -/** - * @brief S25FL512S Configuration - */ -#define S25FL512S_FLASH_SIZE 0x4000000 /* 512 MBits => 64MBytes */ -#define S25FL512S_SECTOR_SIZE 0x40000 /* 256 sectors of 256KBytes */ -#define S25FL512S_PAGE_SIZE 0x200 /* 131072 pages of 512 bytes */ - -#define S25FL512S_BULK_ERASE_MAX_TIME 460000 -#define S25FL512S_SECTOR_ERASE_MAX_TIME 2600 - - -/** - * @brief S25FL512S Commands - */ -/* Reset Operations */ -#define S25FL512S_SOFTWARE_RESET_CMD 0xF0 -#define S25FL512S_MODE_BIT_RESET_CMD 0xFF - -/* Identification Operations */ -#define S25FL512S_READ_ID_CMD 0x90 -#define S25FL512S_READ_ID_CMD2 0x9F -#define S25FL512S_READ_ELECTRONIC_SIGNATURE 0xAB -#define S25FL512S_READ_SERIAL_FLASH_DISCO_PARAM_CMD 0x5A - -/* Register Operations */ -#define S25FL512S_READ_STATUS_REG1_CMD 0x05 -#define S25FL512S_READ_STATUS_REG2_CMD 0x07 -#define S25FL512S_READ_CONFIGURATION_REG1_CMD 0x35 -#define S25FL512S_WRITE_STATUS_CMD_REG_CMD 0x01 -#define S25FL512S_WRITE_DISABLE_CMD 0x04 -#define S25FL512S_WRITE_ENABLE_CMD 0x06 -#define S25FL512S_CLEAR_STATUS_REG1_CMD 0x30 -#define S25FL512S_READ_AUTOBOOT_REG_CMD 0x14 -#define S25FL512S_WRITE_AUTOBOOT_REG_CMD 0x15 -#define S25FL512S_READ_BANK_REG_CMD 0x16 -#define S25FL512S_WRITE_BANK_REG_CMD 0x17 -#define S25FL512S_ACCESS_BANK_REG_CMD 0xB9 -#define S25FL512S_READ_DATA_LEARNING_PATTERN_CMD 0x41 -#define S25FL512S_PGM_NV_DATA_LEARNING_REG_CMD 0x43 -#define S25FL512S_WRITE_VOL_DATA_LEARNING_REG_CMD 0x4A - -/* Read Operations */ -#define S25FL512S_READ_CMD 0x03 -#define S25FL512S_READ_4_BYTE_ADDR_CMD 0x13 - -#define S25FL512S_FAST_READ_CMD 0x0B -#define S25FL512S_FAST_READ_4_BYTE_ADDR_CMD 0x0C -#define S25FL512S_FAST_READ_DDR_CMD 0x0D -#define S25FL512S_FAST_READ__DDR_4_BYTE_ADDR_CMD 0x0E - -#define S25FL512S_DUAL_OUT_FAST_READ_CMD 0x3B -#define S25FL512S_DUAL_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x3C - -#define S25FL512S_QUAD_OUT_FAST_READ_CMD 0x6B -#define S25FL512S_QUAD_OUT_FAST_READ_4_BYTE_ADDR_CMD 0x6C - -#define S25FL512S_DUAL_INOUT_FAST_READ_CMD 0xBB -#define S25FL512S_DUAL_INOUT_FAST_READ_DTR_CMD 0xBD -#define S25FL512S_DUAL_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xBC -#define S25FL512S_DDR_DUAL_INOUT_READ_4_BYTE_ADDR_CMD 0xBE - -#define S25FL512S_QUAD_INOUT_FAST_READ_CMD 0xEB -#define S25FL512S_QUAD_INOUT_FAST_READ_4_BYTE_ADDR_CMD 0xEC -#define S25FL512S_QUAD_INOUT_FAST_READ_DDR_CMD 0xED -#define S25FL512S_QUAD_INOUT_READ_DDR_4_BYTE_ADDR_CMD 0xEE - - -/* Program Operations */ -#define S25FL512S_PAGE_PROG_CMD 0x02 -#define S25FL512S_PAGE_PROG_4_BYTE_ADDR_CMD 0x12 - -#define S25FL512S_QUAD_IN_FAST_PROG_CMD 0x32 -#define S25FL512S_QUAD_IN_FAST_PROG_ALTERNATE_CMD 0x38 -#define S25FL512S_QUAD_IN_FAST_PROG_4_BYTE_ADDR_CMD 0x34 - -#define S25FL512S_PROGRAM_SUSPEND_CMD 0x85 -#define S25FL512S_PROGRAM_RESUME_CMD 0x8A - -/* Erase Operations */ -#define S25FL512S_SECTOR_ERASE_CMD 0xD8 -#define S25FL512S_SECTOR_ERASE_4_BYTE_ADDR_CMD 0xDC - -#define S25FL512S_BULK_ERASE_CMD 0x60 -#define S25FL512S_BULK_ERASE_ALTERNATE_CMD 0xC7 - -#define S25FL512S_PROG_ERASE_SUSPEND_CMD 0x75 -#define S25FL512S_PROG_ERASE_RESUME_CMD 0x7A - -/* One-Time Programmable Operations */ -#define S25FL512S_PROG_OTP_ARRAY_CMD 0x42 -#define S25FL512S_READ_OTP_ARRAY_CMD 0x4B - -/* Advanced Sector Protection Operations */ -#define S25FL512S_READ_DYB_CMD 0xE0 -#define S25FL512S_WRITE_DYB_CMD 0xE1 - -#define S25FL512S_READ_PPB_CMD 0xE2 -#define S25FL512S_PROGRAM_PPB_CMD 0xE3 -#define S25FL512S_ERASE_PPB_CMD 0xE4 - -#define S25FL512S_READ_ASP_CMD 0x2B -#define S25FL512S_PROGRAM_ASP_CMD 0x2F - -#define S25FL512S_READ_PPB_LOCKBIT_CMD 0xA7 -#define S25FL512S_WRITE_PPB_LOCKBIT_CMD 0xA6 - -#define S25FL512S_READ_PASSWORD_CMD 0xE7 -#define S25FL512S_PROGRAM_PASSWORD_CMD 0xE8 -#define S25FL512S_UNLOCK_PASSWORD_CMD 0xE9 - - - -/** - * @brief S25FL512S Registers - */ -/* Status Register-1 */ -#define S25FL512S_SR1_WIP ((uint8_t)0x01) /*!< Write in progress, device busy */ -#define S25FL512S_SR1_WREN ((uint8_t)0x02) /*!< Write Registers, program or commands are accepted */ -#define S25FL512S_SR1_BP0 ((uint8_t)0x04) /*!< Sector0 protected from Program or Erase */ -#define S25FL512S_SR1_BP1 ((uint8_t)0x08) /*!< Sector1 protected from Program or Erase */ -#define S25FL512S_SR1_BP2 ((uint8_t)0x10) /*!< Sector2 protected from Program or Erase */ -#define S25FL512S_SR1_ERERR ((uint8_t)0x20) /*!< Erase error */ -#define S25FL512S_SR1_PGERR ((uint8_t)0x40) /*!< Program error */ -#define S25FL512S_SR1_SRWD ((uint8_t)0x80) /*!< Status Register Write Disable */ - -/* Status Register-2 */ -#define S25FL512S_SR2_PS ((uint8_t)0x01) /*!< Program in Suspend mode */ -#define S25FL512S_SR2_ES ((uint8_t)0x02) /*!< Erase Suspend Mode */ - -/* Configuration Register CR1 */ -#define S25FL512S_CR1_FREEZE ((uint8_t)0x01) /*!< Block protection and OTP locked */ -#define S25FL512S_CR1_QUAD ((uint8_t)0x02) /*!< Quad mode enable */ -#define S25FL512S_CR1_BPNV ((uint8_t)0x08) /*!< BP2-0 bits of Status Reg are volatile */ -#define S25FL512S_CR1_TBPROT ((uint8_t)0x20) /*!< BPstarts at bottom */ -#define S25FL512S_CR1_LC_MASK ((uint8_t)0xC0) /*!< Latency Code mask */ -#define S25FL512S_CR1_LC0 ((uint8_t)0x00) /*!< Latency Code = 0 */ -#define S25FL512S_CR1_LC1 ((uint8_t)0x40) /*!< Latency Code = 1 */ -#define S25FL512S_CR1_LC2 ((uint8_t)0x80) /*!< Latency Code = 2 */ -#define S25FL512S_CR1_LC3 ((uint8_t)0xC0) /*!< Latency Code = 3 */ - -/* AutoBoot Register */ -#define S25FL512S_AB_EN ((uint32_t)0x00000001) /*!< AutoBoot Enabled */ -#define S25FL512S_AB_SD_MASK ((uint32_t)0x000001FE) /*!< AutoBoot Start Delay mask */ -#define S25FL512S_AB_SA_MASK ((uint32_t)0xFFFFFE00) /*!< AutoBoot Start Address mask */ - -/* Bank Address Register */ -#define S25FL512S_BA_BA24 ((uint8_t)0x01) /*!< A24 for 512 Mb device */ -#define S25FL512S_BA_BA25 ((uint8_t)0x02) /*!< A25 for 512 Mb device */ -#define S25FL512S_BA_EXTADD ((uint8_t)0x80) /*!< 4 bytes addressing required from command */ - -/* ASP Register */ -#define S25FL512S_ASP_PSTMLB ((uint16_t)0x0002) /*!< Persistent protection mode not permanently enabled */ -#define S25FL512S_ASP_PWSMLB ((uint16_t)0x0003) /*!< Password protection mode not permanently enabled */ - -/* PPB Lock Register */ -#define S25FL512S_PPBLOCK ((uint8_t)0x01) /*!< PPB array may be programmed or erased */ - -/** - * @} - */ - -/** @defgroup S25FL512S_Exported_Functions - * @{ - */ -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __S25FL512S_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/s5k5cag b/Drivers/BSP/Components/s5k5cag new file mode 160000 index 0000000000..f63459917f --- /dev/null +++ b/Drivers/BSP/Components/s5k5cag @@ -0,0 +1 @@ +Subproject commit f63459917fb318ec10549ab0e4052215565431da diff --git a/Drivers/BSP/Components/s5k5cag/LICENSE.md b/Drivers/BSP/Components/s5k5cag/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/s5k5cag/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/s5k5cag/Release_Notes.html b/Drivers/BSP/Components/s5k5cag/Release_Notes.html deleted file mode 100644 index 6064276d36..0000000000 --- a/Drivers/BSP/Components/s5k5cag/Release_Notes.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Release Notes for S5K5CAG Component Driver - - - - - - -
-
-
-

Release Notes for

-

S5K5CAG Component Driver

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the S5K5CAG Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of S5K5CAG CAMERA component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/s5k5cag/_htmresc/favicon.png b/Drivers/BSP/Components/s5k5cag/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/s5k5cag/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/s5k5cag/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/s5k5cag/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/s5k5cag/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/s5k5cag/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/s5k5cag/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/s5k5cag/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/s5k5cag/s5k5cag.c b/Drivers/BSP/Components/s5k5cag/s5k5cag.c deleted file mode 100644 index 44d9fb80e3..0000000000 --- a/Drivers/BSP/Components/s5k5cag/s5k5cag.c +++ /dev/null @@ -1,3429 +0,0 @@ -/** - ****************************************************************************** - * @file s5k5cag.c - * @author MCD Application Team - * @brief This file provides the S5K5CAG camera driver - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "s5k5cag.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup S5K5CAG - * @brief This file provides a set of functions needed to drive the - * S5K5CAG Camera module. - * @{ - */ - -/** @defgroup S5K5CAG_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup S5K5CAG_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup S5K5CAG_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup S5K5CAG_Private_FunctionPrototypes - * @{ - */ -static uint32_t s5k5cag_ConvertValue(uint32_t feature, uint32_t value); -/** - * @} - */ - -/** @defgroup S5K5CAG_Private_Variables - * @{ - */ - -CAMERA_DrvTypeDef s5k5cag_drv = -{ - s5k5cag_Init, - s5k5cag_ReadID, - s5k5cag_Config, -}; - -/* Common initialization sequence for all resolutions */ -const uint16_t S5K5CAG_Common[][2]= -{ - /* ARM GO */ - /* Direct mode */ - {0xFCFC, 0xD000}, - {0x0010, 0x0001}, /* Reset */ - {0x1030, 0x0000}, /* Clear host interrupt so main will wait */ - {0x0014, 0x0001}, /* ARM go */ - {0xFFFF, 0x0064}, /* Min.10ms delay is required */ - - /* Set IO driving current */ - {0x0028, 0xD000}, - {0x002A, 0x1082}, - {0x0F12, 0x0155}, /* [9:8] D4, [7:6] D3, [5:4] D2, [3:2] D1, [1:0] D0 */ - {0x0F12, 0x0155}, /* [9:8] D9, [7:6] D8, [5:4] D7, [3:2] D6, [1:0] D5 */ - {0x0F12, 0x1555}, /* [5:4] GPIO3, [3:2] GPIO2, [1:0] GPIO1 */ - {0x0F12, 0x0555}, /* [11:10] SDA, [9:8] SCA, [7:6] PCLK, [3:2] VSYNC, [1:0] HSYNC */ - - /* Start T&P part */ - {0x0028, 0x7000}, - {0x002A, 0x2CF8}, - {0x0F12, 0xB510}, - {0x0F12, 0x490F}, - {0x0F12, 0x2000}, - {0x0F12, 0x8048}, - {0x0F12, 0x8088}, - {0x0F12, 0x490E}, - {0x0F12, 0x480E}, - {0x0F12, 0xF000}, - {0x0F12, 0xF949}, - {0x0F12, 0x490E}, - {0x0F12, 0x480E}, - {0x0F12, 0x6341}, - {0x0F12, 0x490E}, - {0x0F12, 0x38C0}, - {0x0F12, 0x63C1}, - {0x0F12, 0x490E}, - {0x0F12, 0x6301}, - {0x0F12, 0x490E}, - {0x0F12, 0x3040}, - {0x0F12, 0x6181}, - {0x0F12, 0x490D}, - {0x0F12, 0x480E}, - {0x0F12, 0xF000}, - {0x0F12, 0xF93A}, - {0x0F12, 0x490D}, - {0x0F12, 0x480E}, - {0x0F12, 0xF000}, - {0x0F12, 0xF936}, - {0x0F12, 0xBC10}, - {0x0F12, 0xBC08}, - {0x0F12, 0x4718}, - {0x0F12, 0x0000}, - {0x0F12, 0x1080}, - {0x0F12, 0xD000}, - {0x0F12, 0x2D69}, - {0x0F12, 0x7000}, - {0x0F12, 0x89A9}, - {0x0F12, 0x0000}, - {0x0F12, 0x2DBB}, - {0x0F12, 0x7000}, - {0x0F12, 0x0140}, - {0x0F12, 0x7000}, - {0x0F12, 0x2DED}, - {0x0F12, 0x7000}, - {0x0F12, 0x2E65}, - {0x0F12, 0x7000}, - {0x0F12, 0x2E79}, - {0x0F12, 0x7000}, - {0x0F12, 0x2E4D}, - {0x0F12, 0x7000}, - {0x0F12, 0x013D}, - {0x0F12, 0x0001}, - {0x0F12, 0x2F03}, - {0x0F12, 0x7000}, - {0x0F12, 0x5823}, - {0x0F12, 0x0000}, - {0x0F12, 0xB570}, - {0x0F12, 0x6804}, - {0x0F12, 0x6845}, - {0x0F12, 0x6881}, - {0x0F12, 0x6840}, - {0x0F12, 0x2900}, - {0x0F12, 0x6880}, - {0x0F12, 0xD007}, - {0x0F12, 0x4976}, - {0x0F12, 0x8949}, - {0x0F12, 0x084A}, - {0x0F12, 0x1880}, - {0x0F12, 0xF000}, - {0x0F12, 0xF914}, - {0x0F12, 0x80A0}, - {0x0F12, 0xE000}, - {0x0F12, 0x80A0}, - {0x0F12, 0x88A0}, - {0x0F12, 0x2800}, - {0x0F12, 0xD010}, - {0x0F12, 0x68A9}, - {0x0F12, 0x6828}, - {0x0F12, 0x084A}, - {0x0F12, 0x1880}, - {0x0F12, 0xF000}, - {0x0F12, 0xF908}, - {0x0F12, 0x8020}, - {0x0F12, 0x1D2D}, - {0x0F12, 0xCD03}, - {0x0F12, 0x084A}, - {0x0F12, 0x1880}, - {0x0F12, 0xF000}, - {0x0F12, 0xF901}, - {0x0F12, 0x8060}, - {0x0F12, 0xBC70}, - {0x0F12, 0xBC08}, - {0x0F12, 0x4718}, - {0x0F12, 0x2000}, - {0x0F12, 0x8060}, - {0x0F12, 0x8020}, - {0x0F12, 0xE7F8}, - {0x0F12, 0xB510}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8FC}, - {0x0F12, 0x4865}, - {0x0F12, 0x4966}, - {0x0F12, 0x8800}, - {0x0F12, 0x4A66}, - {0x0F12, 0x2805}, - {0x0F12, 0xD003}, - {0x0F12, 0x4B65}, - {0x0F12, 0x795B}, - {0x0F12, 0x2B00}, - {0x0F12, 0xD005}, - {0x0F12, 0x2001}, - {0x0F12, 0x8008}, - {0x0F12, 0x8010}, - {0x0F12, 0xBC10}, - {0x0F12, 0xBC08}, - {0x0F12, 0x4718}, - {0x0F12, 0x2800}, - {0x0F12, 0xD1FA}, - {0x0F12, 0x2000}, - {0x0F12, 0x8008}, - {0x0F12, 0x8010}, - {0x0F12, 0xE7F6}, - {0x0F12, 0xB570}, - {0x0F12, 0x0004}, - {0x0F12, 0x485D}, - {0x0F12, 0x2C00}, - {0x0F12, 0x8D00}, - {0x0F12, 0xD001}, - {0x0F12, 0x2501}, - {0x0F12, 0xE000}, - {0x0F12, 0x2500}, - {0x0F12, 0x4E5B}, - {0x0F12, 0x4328}, - {0x0F12, 0x8030}, - {0x0F12, 0x207D}, - {0x0F12, 0x00C0}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8DE}, - {0x0F12, 0x4858}, - {0x0F12, 0x2C00}, - {0x0F12, 0x8C40}, - {0x0F12, 0x0329}, - {0x0F12, 0x4308}, - {0x0F12, 0x8130}, - {0x0F12, 0x4856}, - {0x0F12, 0x2C00}, - {0x0F12, 0x8A40}, - {0x0F12, 0x01A9}, - {0x0F12, 0x4308}, - {0x0F12, 0x80B0}, - {0x0F12, 0x2C00}, - {0x0F12, 0xD00B}, - {0x0F12, 0x4853}, - {0x0F12, 0x8A01}, - {0x0F12, 0x4853}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8BD}, - {0x0F12, 0x4953}, - {0x0F12, 0x8809}, - {0x0F12, 0x4348}, - {0x0F12, 0x0400}, - {0x0F12, 0x0C00}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8C4}, - {0x0F12, 0x0020}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8C9}, - {0x0F12, 0x484F}, - {0x0F12, 0x7004}, - {0x0F12, 0xE7AF}, - {0x0F12, 0xB510}, - {0x0F12, 0x0004}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8CA}, - {0x0F12, 0x6020}, - {0x0F12, 0x494C}, - {0x0F12, 0x8B49}, - {0x0F12, 0x0789}, - {0x0F12, 0xD0BD}, - {0x0F12, 0x0040}, - {0x0F12, 0x6020}, - {0x0F12, 0xE7BA}, - {0x0F12, 0xB510}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8C7}, - {0x0F12, 0x4848}, - {0x0F12, 0x8880}, - {0x0F12, 0x0601}, - {0x0F12, 0x4840}, - {0x0F12, 0x1609}, - {0x0F12, 0x8281}, - {0x0F12, 0xE7B0}, - {0x0F12, 0xB5F8}, - {0x0F12, 0x000F}, - {0x0F12, 0x4C3A}, - {0x0F12, 0x3420}, - {0x0F12, 0x2500}, - {0x0F12, 0x5765}, - {0x0F12, 0x0039}, - {0x0F12, 0xF000}, - {0x0F12, 0xF8BF}, - {0x0F12, 0x9000}, - {0x0F12, 0x2600}, - {0x0F12, 0x57A6}, - {0x0F12, 0x4C38}, - {0x0F12, 0x42AE}, - {0x0F12, 0xD01B}, - {0x0F12, 0x4D3D}, - {0x0F12, 0x8AE8}, - {0x0F12, 0x2800}, - {0x0F12, 0xD013}, - {0x0F12, 0x4832}, - {0x0F12, 0x8A01}, - {0x0F12, 0x8B80}, - {0x0F12, 0x4378}, - {0x0F12, 0xF000}, - {0x0F12, 0xF881}, - {0x0F12, 0x89A9}, - {0x0F12, 0x1A41}, - {0x0F12, 0x4837}, - {0x0F12, 0x3820}, - {0x0F12, 0x8AC0}, - {0x0F12, 0x4348}, - {0x0F12, 0x17C1}, - {0x0F12, 0x0D89}, - {0x0F12, 0x1808}, - {0x0F12, 0x1280}, - {0x0F12, 0x8AA1}, - {0x0F12, 0x1A08}, - {0x0F12, 0x82A0}, - {0x0F12, 0xE003}, - {0x0F12, 0x88A8}, - {0x0F12, 0x0600}, - {0x0F12, 0x1600}, - {0x0F12, 0x82A0}, - {0x0F12, 0x2014}, - {0x0F12, 0x5E20}, - {0x0F12, 0x42B0}, - {0x0F12, 0xD011}, - {0x0F12, 0xF000}, - {0x0F12, 0xF89F}, - {0x0F12, 0x1D40}, - {0x0F12, 0x00C3}, - {0x0F12, 0x1A18}, - {0x0F12, 0x214B}, - {0x0F12, 0xF000}, - {0x0F12, 0xF863}, - {0x0F12, 0x211F}, - {0x0F12, 0xF000}, - {0x0F12, 0xF89E}, - {0x0F12, 0x2114}, - {0x0F12, 0x5E61}, - {0x0F12, 0x0FC9}, - {0x0F12, 0x0149}, - {0x0F12, 0x4301}, - {0x0F12, 0x4826}, - {0x0F12, 0x81C1}, - {0x0F12, 0x9800}, - {0x0F12, 0xBCF8}, - {0x0F12, 0xBC08}, - {0x0F12, 0x4718}, - {0x0F12, 0xB5F1}, - {0x0F12, 0xB082}, - {0x0F12, 0x2500}, - {0x0F12, 0x4822}, - {0x0F12, 0x9001}, - {0x0F12, 0x2400}, - {0x0F12, 0x2028}, - {0x0F12, 0x4368}, - {0x0F12, 0x4A21}, - {0x0F12, 0x4917}, - {0x0F12, 0x1882}, - {0x0F12, 0x39E0}, - {0x0F12, 0x1847}, - {0x0F12, 0x9200}, - {0x0F12, 0x0066}, - {0x0F12, 0x19B8}, - {0x0F12, 0x9A01}, - {0x0F12, 0x3060}, - {0x0F12, 0x8B01}, - {0x0F12, 0x5BB8}, - {0x0F12, 0x8812}, - {0x0F12, 0xF000}, - {0x0F12, 0xF884}, - {0x0F12, 0x9900}, - {0x0F12, 0x5388}, - {0x0F12, 0x1C64}, - {0x0F12, 0x2C14}, - {0x0F12, 0xDBF1}, - {0x0F12, 0x1C6D}, - {0x0F12, 0x2D03}, - {0x0F12, 0xDBE5}, - {0x0F12, 0x9802}, - {0x0F12, 0x6800}, - {0x0F12, 0x0600}, - {0x0F12, 0x0E00}, - {0x0F12, 0xF000}, - {0x0F12, 0xF87E}, - {0x0F12, 0xBCFE}, - {0x0F12, 0xBC08}, - {0x0F12, 0x4718}, - {0x0F12, 0x0000}, - {0x0F12, 0x0C3C}, - {0x0F12, 0x7000}, - {0x0F12, 0x26E8}, - {0x0F12, 0x7000}, - {0x0F12, 0x6100}, - {0x0F12, 0xD000}, - {0x0F12, 0x6500}, - {0x0F12, 0xD000}, - {0x0F12, 0x1A7C}, - {0x0F12, 0x7000}, - {0x0F12, 0x2C2C}, - {0x0F12, 0x7000}, - {0x0F12, 0xF400}, - {0x0F12, 0xD000}, - {0x0F12, 0x167C}, - {0x0F12, 0x7000}, - {0x0F12, 0x3368}, - {0x0F12, 0x7000}, - {0x0F12, 0x1D6C}, - {0x0F12, 0x7000}, - {0x0F12, 0x40A0}, - {0x0F12, 0x00DD}, - {0x0F12, 0xF520}, - {0x0F12, 0xD000}, - {0x0F12, 0x2C29}, - {0x0F12, 0x7000}, - {0x0F12, 0x1A54}, - {0x0F12, 0x7000}, - {0x0F12, 0x1564}, - {0x0F12, 0x7000}, - {0x0F12, 0xF2A0}, - {0x0F12, 0xD000}, - {0x0F12, 0x2440}, - {0x0F12, 0x7000}, - {0x0F12, 0x05A0}, - {0x0F12, 0x7000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x1A3F}, - {0x0F12, 0x0001}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xF004}, - {0x0F12, 0xE51F}, - {0x0F12, 0x1F48}, - {0x0F12, 0x0001}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x24BD}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0xF53F}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0xF5D9}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x013D}, - {0x0F12, 0x0001}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0xF5C9}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0xFAA9}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x36DD}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x36ED}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x3723}, - {0x0F12, 0x0000}, - {0x0F12, 0x4778}, - {0x0F12, 0x46C0}, - {0x0F12, 0xC000}, - {0x0F12, 0xE59F}, - {0x0F12, 0xFF1C}, - {0x0F12, 0xE12F}, - {0x0F12, 0x5823}, - {0x0F12, 0x0000}, - {0x0F12, 0x7D3E}, - {0x0F12, 0x0000}, - /* End T&P part */ - - /* CIS/APS/Analog setting- 400LSBSYSCLK 45M */ - {0x0028, 0x7000}, - {0x002A, 0x157A}, - {0x0F12, 0x0001}, - {0x002A, 0x1578}, - {0x0F12, 0x0001}, - {0x002A, 0x1576}, - {0x0F12, 0x0020}, - {0x002A, 0x1574}, - {0x0F12, 0x0006}, - {0x002A, 0x156E}, - {0x0F12, 0x0001}, /* Slope calibration tolerance in units of 1/256 */ - {0x002A, 0x1568}, - {0x0F12, 0x00FC}, - - /* ADC control */ - {0x002A, 0x155A}, - {0x0F12, 0x01CC}, /* ADC SAT of 450mV for 10bit default in EVT1 */ - {0x002A, 0x157E}, - {0x0F12, 0x0C80}, /* 3200 Max. Reset ramp DCLK counts (default 2048 0x800) */ - {0x0F12, 0x0578}, /* 1400 Max. Reset ramp DCLK counts for x3.5 */ - {0x002A, 0x157C}, - {0x0F12, 0x0190}, /* 400 Reset ramp for x1 in DCLK counts */ - {0x002A, 0x1570}, - {0x0F12, 0x00A0}, /* 224 LSB */ - {0x0F12, 0x0010}, /* reset threshold */ - {0x002A, 0x12C4}, - {0x0F12, 0x006A}, /* 106 additional timing columns */ - {0x002A, 0x12C8}, - {0x0F12, 0x08AC}, /* 2220 ADC columns in normal mode including Hold & Latch */ - {0x0F12, 0x0050}, /* 80 addition of ADC columns in Y-ave mode (default 244 0x74) */ - - {0x002A, 0x1696}, - {0x0F12, 0x0000}, /* based on APS guidelines */ - {0x0F12, 0x0000}, /* based on APS guidelines */ - {0x0F12, 0x00C6}, /* default. 1492 used for ADC dark characteristics */ - {0x0F12, 0x00C6}, /* default. 1492 used for ADC dark characteristics */ - {0x002A, 0x1690}, - {0x0F12, 0x0001}, /* when set double sampling is activated - requires different set of pointers */ - {0x002A, 0x12B0}, - {0x0F12, 0x0055}, /* comp and pixel bias control 0xF40E - default for EVT1 */ - {0x0F12, 0x005A}, /* comp and pixel bias control 0xF40E for binning mode */ - {0x002A, 0x337A}, - {0x0F12, 0x0006}, /* [7] - is used for rest-only mode (EVT0 value is 0xD and HW 0x6) */ - {0x002A, 0x169E}, /* [3:0]- specifies the target (default 7)- DCLK = 64MHz instead of 116MHz */ - {0x0F12, 0x000A}, - {0x0028, 0xD000}, - {0x002A, 0xF406}, - {0x0F12, 0x1000}, /* [11]: Enable DBLR Regulation */ - {0x002A, 0xF40A}, - {0x0F12, 0x6998}, /* [3:0]: VPIX ~2.8V */ - {0x002A, 0xF418}, - {0x0F12, 0x0078}, /* [0]: Static RC-filter */ - {0x0F12, 0x04FE}, /* [7:4]: Full RC-filter */ - {0x002A, 0xF52C}, - {0x0F12, 0x8800}, /* [11]: Add load to CDS block */ - - {0x002A, 0x3274}, - {0x0F12, 0x0155}, - {0x0F12, 0x0155}, - {0x0F12, 0x1555}, - {0x0F12, 0x0555}, - - /* Asserting CDS pointers - Long exposure MS Normal */ - /* Conditions: 10bit, ADC_SAT = 450mV ; ramp_del = 22 ; ramp_start = 34 */ - {0x0028, 0x7000}, - {0x002A, 0x12D2}, - {0x0F12, 0x0003}, /* #senHal_pContSenModesRegsArray[0][0]2 700012D2 */ - {0x0F12, 0x0003}, /* #senHal_pContSenModesRegsArray[0][1]2 700012D4 */ - {0x0F12, 0x0003}, /* #senHal_pContSenModesRegsArray[0][2]2 700012D6 */ - {0x0F12, 0x0003}, /* #senHal_pContSenModesRegsArray[0][3]2 700012D8 */ - {0x0F12, 0x0884}, /* #senHal_pContSenModesRegsArray[1][0]2 700012DA */ - {0x0F12, 0x08CF}, /* #senHal_pContSenModesRegsArray[1][1]2 700012DC */ - {0x0F12, 0x0500}, /* #senHal_pContSenModesRegsArray[1][2]2 700012DE */ - {0x0F12, 0x054B}, /* #senHal_pContSenModesRegsArray[1][3]2 700012E0 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[2][0]2 700012E2 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[2][1]2 700012E4 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[2][2]2 700012E6 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[2][3]2 700012E8 */ - {0x0F12, 0x0885}, /* #senHal_pContSenModesRegsArray[3][0]2 700012EA */ - {0x0F12, 0x0467}, /* #senHal_pContSenModesRegsArray[3][1]2 700012EC */ - {0x0F12, 0x0501}, /* #senHal_pContSenModesRegsArray[3][2]2 700012EE */ - {0x0F12, 0x02A5}, /* #senHal_pContSenModesRegsArray[3][3]2 700012F0 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[4][0]2 700012F2 */ - {0x0F12, 0x046A}, /* #senHal_pContSenModesRegsArray[4][1]2 700012F4 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[4][2]2 700012F6 */ - {0x0F12, 0x02A8}, /* #senHal_pContSenModesRegsArray[4][3]2 700012F8 */ - {0x0F12, 0x0885}, /* #senHal_pContSenModesRegsArray[5][0]2 700012FA */ - {0x0F12, 0x08D0}, /* #senHal_pContSenModesRegsArray[5][1]2 700012FC */ - {0x0F12, 0x0501}, /* #senHal_pContSenModesRegsArray[5][2]2 700012FE */ - {0x0F12, 0x054C}, /* #senHal_pContSenModesRegsArray[5][3]2 70001300 */ - {0x0F12, 0x0006}, /* #senHal_pContSenModesRegsArray[6][0]2 70001302 */ - {0x0F12, 0x0020}, /* #senHal_pContSenModesRegsArray[6][1]2 70001304 */ - {0x0F12, 0x0006}, /* #senHal_pContSenModesRegsArray[6][2]2 70001306 */ - {0x0F12, 0x0020}, /* #senHal_pContSenModesRegsArray[6][3]2 70001308 */ - {0x0F12, 0x0881}, /* #senHal_pContSenModesRegsArray[7][0]2 7000130A */ - {0x0F12, 0x0463}, /* #senHal_pContSenModesRegsArray[7][1]2 7000130C */ - {0x0F12, 0x04FD}, /* #senHal_pContSenModesRegsArray[7][2]2 7000130E */ - {0x0F12, 0x02A1}, /* #senHal_pContSenModesRegsArray[7][3]2 70001310 */ - {0x0F12, 0x0006}, /* #senHal_pContSenModesRegsArray[8][0]2 70001312 */ - {0x0F12, 0x0489}, /* #senHal_pContSenModesRegsArray[8][1]2 70001314 */ - {0x0F12, 0x0006}, /* #senHal_pContSenModesRegsArray[8][2]2 70001316 */ - {0x0F12, 0x02C7}, /* #senHal_pContSenModesRegsArray[8][3]2 70001318 */ - {0x0F12, 0x0881}, /* #senHal_pContSenModesRegsArray[9][0]2 7000131A */ - {0x0F12, 0x08CC}, /* #senHal_pContSenModesRegsArray[9][1]2 7000131C */ - {0x0F12, 0x04FD}, /* #senHal_pContSenModesRegsArray[9][2]2 7000131E */ - {0x0F12, 0x0548}, /* #senHal_pContSenModesRegsArray[9][3]2 70001320 */ - {0x0F12, 0x03A2}, /* #senHal_pContSenModesRegsArray[10][0] 2 70001322 */ - {0x0F12, 0x01D3}, /* #senHal_pContSenModesRegsArray[10][1] 2 70001324 */ - {0x0F12, 0x01E0}, /* #senHal_pContSenModesRegsArray[10][2] 2 70001326 */ - {0x0F12, 0x00F2}, /* #senHal_pContSenModesRegsArray[10][3] 2 70001328 */ - {0x0F12, 0x03F2}, /* #senHal_pContSenModesRegsArray[11][0] 2 7000132A */ - {0x0F12, 0x0223}, /* #senHal_pContSenModesRegsArray[11][1] 2 7000132C */ - {0x0F12, 0x0230}, /* #senHal_pContSenModesRegsArray[11][2] 2 7000132E */ - {0x0F12, 0x0142}, /* #senHal_pContSenModesRegsArray[11][3] 2 70001330 */ - {0x0F12, 0x03A2}, /* #senHal_pContSenModesRegsArray[12][0] 2 70001332 */ - {0x0F12, 0x063C}, /* #senHal_pContSenModesRegsArray[12][1] 2 70001334 */ - {0x0F12, 0x01E0}, /* #senHal_pContSenModesRegsArray[12][2] 2 70001336 */ - {0x0F12, 0x0399}, /* #senHal_pContSenModesRegsArray[12][3] 2 70001338 */ - {0x0F12, 0x03F2}, /* #senHal_pContSenModesRegsArray[13][0] 2 7000133A */ - {0x0F12, 0x068C}, /* #senHal_pContSenModesRegsArray[13][1] 2 7000133C */ - {0x0F12, 0x0230}, /* #senHal_pContSenModesRegsArray[13][2] 2 7000133E */ - {0x0F12, 0x03E9}, /* #senHal_pContSenModesRegsArray[13][3] 2 70001340 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[14][0] 2 70001342 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[14][1] 2 70001344 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[14][2] 2 70001346 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[14][3] 2 70001348 */ - {0x0F12, 0x003C}, /* #senHal_pContSenModesRegsArray[15][0] 2 7000134A */ - {0x0F12, 0x003C}, /* #senHal_pContSenModesRegsArray[15][1] 2 7000134C */ - {0x0F12, 0x003C}, /* #senHal_pContSenModesRegsArray[15][2] 2 7000134E */ - {0x0F12, 0x003C}, /* #senHal_pContSenModesRegsArray[15][3] 2 70001350 */ - {0x0F12, 0x01D3}, /* #senHal_pContSenModesRegsArray[16][0] 2 70001352 */ - {0x0F12, 0x01D3}, /* #senHal_pContSenModesRegsArray[16][1] 2 70001354 */ - {0x0F12, 0x00F2}, /* #senHal_pContSenModesRegsArray[16][2] 2 70001356 */ - {0x0F12, 0x00F2}, /* #senHal_pContSenModesRegsArray[16][3] 2 70001358 */ - {0x0F12, 0x020B}, /* #senHal_pContSenModesRegsArray[17][0] 2 7000135A */ - {0x0F12, 0x024A}, /* #senHal_pContSenModesRegsArray[17][1] 2 7000135C */ - {0x0F12, 0x012A}, /* #senHal_pContSenModesRegsArray[17][2] 2 7000135E */ - {0x0F12, 0x0169}, /* #senHal_pContSenModesRegsArray[17][3] 2 70001360 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[18][0] 2 70001362 */ - {0x0F12, 0x046B}, /* #senHal_pContSenModesRegsArray[18][1] 2 70001364 */ - {0x0F12, 0x0002}, /* #senHal_pContSenModesRegsArray[18][2] 2 70001366 */ - {0x0F12, 0x02A9}, /* #senHal_pContSenModesRegsArray[18][3] 2 70001368 */ - {0x0F12, 0x0419}, /* #senHal_pContSenModesRegsArray[19][0] 2 7000136A */ - {0x0F12, 0x04A5}, /* #senHal_pContSenModesRegsArray[19][1] 2 7000136C */ - {0x0F12, 0x0257}, /* #senHal_pContSenModesRegsArray[19][2] 2 7000136E */ - {0x0F12, 0x02E3}, /* #senHal_pContSenModesRegsArray[19][3] 2 70001370 */ - {0x0F12, 0x0630}, /* #senHal_pContSenModesRegsArray[20][0] 2 70001372 */ - {0x0F12, 0x063C}, /* #senHal_pContSenModesRegsArray[20][1] 2 70001374 */ - {0x0F12, 0x038D}, /* #senHal_pContSenModesRegsArray[20][2] 2 70001376 */ - {0x0F12, 0x0399}, /* #senHal_pContSenModesRegsArray[20][3] 2 70001378 */ - {0x0F12, 0x0668}, /* #senHal_pContSenModesRegsArray[21][0] 2 7000137A */ - {0x0F12, 0x06B3}, /* #senHal_pContSenModesRegsArray[21][1] 2 7000137C */ - {0x0F12, 0x03C5}, /* #senHal_pContSenModesRegsArray[21][2] 2 7000137E */ - {0x0F12, 0x0410}, /* #senHal_pContSenModesRegsArray[21][3] 2 70001380 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[22][0] 2 70001382 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[22][1] 2 70001384 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[22][2] 2 70001386 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[22][3] 2 70001388 */ - {0x0F12, 0x03A2}, /* #senHal_pContSenModesRegsArray[23][0] 2 7000138A */ - {0x0F12, 0x01D3}, /* #senHal_pContSenModesRegsArray[23][1] 2 7000138C */ - {0x0F12, 0x01E0}, /* #senHal_pContSenModesRegsArray[23][2] 2 7000138E */ - {0x0F12, 0x00F2}, /* #senHal_pContSenModesRegsArray[23][3] 2 70001390 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[24][0] 2 70001392 */ - {0x0F12, 0x0461}, /* #senHal_pContSenModesRegsArray[24][1] 2 70001394 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[24][2] 2 70001396 */ - {0x0F12, 0x029F}, /* #senHal_pContSenModesRegsArray[24][3] 2 70001398 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[25][0] 2 7000139A */ - {0x0F12, 0x063C}, /* #senHal_pContSenModesRegsArray[25][1] 2 7000139C */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[25][2] 2 7000139E */ - {0x0F12, 0x0399}, /* #senHal_pContSenModesRegsArray[25][3] 2 700013A0 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[26][0] 2 700013A2 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[26][1] 2 700013A4 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[26][2] 2 700013A6 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[26][3] 2 700013A8 */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[27][0] 2 700013AA */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[27][1] 2 700013AC */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[27][2] 2 700013AE */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[27][3] 2 700013B0 */ - {0x0F12, 0x020C}, /* #senHal_pContSenModesRegsArray[28][0] 2 700013B2 */ - {0x0F12, 0x024B}, /* #senHal_pContSenModesRegsArray[28][1] 2 700013B4 */ - {0x0F12, 0x012B}, /* #senHal_pContSenModesRegsArray[28][2] 2 700013B6 */ - {0x0F12, 0x016A}, /* #senHal_pContSenModesRegsArray[28][3] 2 700013B8 */ - {0x0F12, 0x039F}, /* #senHal_pContSenModesRegsArray[29][0] 2 700013BA */ - {0x0F12, 0x045E}, /* #senHal_pContSenModesRegsArray[29][1] 2 700013BC */ - {0x0F12, 0x01DD}, /* #senHal_pContSenModesRegsArray[29][2] 2 700013BE */ - {0x0F12, 0x029C}, /* #senHal_pContSenModesRegsArray[29][3] 2 700013C0 */ - {0x0F12, 0x041A}, /* #senHal_pContSenModesRegsArray[30][0] 2 700013C2 */ - {0x0F12, 0x04A6}, /* #senHal_pContSenModesRegsArray[30][1] 2 700013C4 */ - {0x0F12, 0x0258}, /* #senHal_pContSenModesRegsArray[30][2] 2 700013C6 */ - {0x0F12, 0x02E4}, /* #senHal_pContSenModesRegsArray[30][3] 2 700013C8 */ - {0x0F12, 0x062D}, /* #senHal_pContSenModesRegsArray[31][0] 2 700013CA */ - {0x0F12, 0x0639}, /* #senHal_pContSenModesRegsArray[31][1] 2 700013CC */ - {0x0F12, 0x038A}, /* #senHal_pContSenModesRegsArray[31][2] 2 700013CE */ - {0x0F12, 0x0396}, /* #senHal_pContSenModesRegsArray[31][3] 2 700013D0 */ - {0x0F12, 0x0669}, /* #senHal_pContSenModesRegsArray[32][0] 2 700013D2 */ - {0x0F12, 0x06B4}, /* #senHal_pContSenModesRegsArray[32][1] 2 700013D4 */ - {0x0F12, 0x03C6}, /* #senHal_pContSenModesRegsArray[32][2] 2 700013D6 */ - {0x0F12, 0x0411}, /* #senHal_pContSenModesRegsArray[32][3] 2 700013D8 */ - {0x0F12, 0x087C}, /* #senHal_pContSenModesRegsArray[33][0] 2 700013DA */ - {0x0F12, 0x08C7}, /* #senHal_pContSenModesRegsArray[33][1] 2 700013DC */ - {0x0F12, 0x04F8}, /* #senHal_pContSenModesRegsArray[33][2] 2 700013DE */ - {0x0F12, 0x0543}, /* #senHal_pContSenModesRegsArray[33][3] 2 700013E0 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[34][0] 2 700013E2 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[34][1] 2 700013E4 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[34][2] 2 700013E6 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[34][3] 2 700013E8 */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[35][0] 2 700013EA */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[35][1] 2 700013EC */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[35][2] 2 700013EE */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[35][3] 2 700013F0 */ - {0x0F12, 0x020F}, /* #senHal_pContSenModesRegsArray[36][0] 2 700013F2 */ - {0x0F12, 0x024E}, /* #senHal_pContSenModesRegsArray[36][1] 2 700013F4 */ - {0x0F12, 0x012E}, /* #senHal_pContSenModesRegsArray[36][2] 2 700013F6 */ - {0x0F12, 0x016D}, /* #senHal_pContSenModesRegsArray[36][3] 2 700013F8 */ - {0x0F12, 0x039F}, /* #senHal_pContSenModesRegsArray[37][0] 2 700013FA */ - {0x0F12, 0x045E}, /* #senHal_pContSenModesRegsArray[37][1] 2 700013FC */ - {0x0F12, 0x01DD}, /* #senHal_pContSenModesRegsArray[37][2] 2 700013FE */ - {0x0F12, 0x029C}, /* #senHal_pContSenModesRegsArray[37][3] 2 70001400 */ - {0x0F12, 0x041D}, /* #senHal_pContSenModesRegsArray[38][0] 2 70001402 */ - {0x0F12, 0x04A9}, /* #senHal_pContSenModesRegsArray[38][1] 2 70001404 */ - {0x0F12, 0x025B}, /* #senHal_pContSenModesRegsArray[38][2] 2 70001406 */ - {0x0F12, 0x02E7}, /* #senHal_pContSenModesRegsArray[38][3] 2 70001408 */ - {0x0F12, 0x062D}, /* #senHal_pContSenModesRegsArray[39][0] 2 7000140A */ - {0x0F12, 0x0639}, /* #senHal_pContSenModesRegsArray[39][1] 2 7000140C */ - {0x0F12, 0x038A}, /* #senHal_pContSenModesRegsArray[39][2] 2 7000140E */ - {0x0F12, 0x0396}, /* #senHal_pContSenModesRegsArray[39][3] 2 70001410 */ - {0x0F12, 0x066C}, /* #senHal_pContSenModesRegsArray[40][0] 2 70001412 */ - {0x0F12, 0x06B7}, /* #senHal_pContSenModesRegsArray[40][1] 2 70001414 */ - {0x0F12, 0x03C9}, /* #senHal_pContSenModesRegsArray[40][2] 2 70001416 */ - {0x0F12, 0x0414}, /* #senHal_pContSenModesRegsArray[40][3] 2 70001418 */ - {0x0F12, 0x087C}, /* #senHal_pContSenModesRegsArray[41][0] 2 7000141A */ - {0x0F12, 0x08C7}, /* #senHal_pContSenModesRegsArray[41][1] 2 7000141C */ - {0x0F12, 0x04F8}, /* #senHal_pContSenModesRegsArray[41][2] 2 7000141E */ - {0x0F12, 0x0543}, /* #senHal_pContSenModesRegsArray[41][3] 2 70001420 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[42][0] 2 70001422 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[42][1] 2 70001424 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[42][2] 2 70001426 */ - {0x0F12, 0x0040}, /* #senHal_pContSenModesRegsArray[42][3] 2 70001428 */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[43][0] 2 7000142A */ - {0x0F12, 0x01D0}, /* #senHal_pContSenModesRegsArray[43][1] 2 7000142C */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[43][2] 2 7000142E */ - {0x0F12, 0x00EF}, /* #senHal_pContSenModesRegsArray[43][3] 2 70001430 */ - {0x0F12, 0x020F}, /* #senHal_pContSenModesRegsArray[44][0] 2 70001432 */ - {0x0F12, 0x024E}, /* #senHal_pContSenModesRegsArray[44][1] 2 70001434 */ - {0x0F12, 0x012E}, /* #senHal_pContSenModesRegsArray[44][2] 2 70001436 */ - {0x0F12, 0x016D}, /* #senHal_pContSenModesRegsArray[44][3] 2 70001438 */ - {0x0F12, 0x039F}, /* #senHal_pContSenModesRegsArray[45][0] 2 7000143A */ - {0x0F12, 0x045E}, /* #senHal_pContSenModesRegsArray[45][1] 2 7000143C */ - {0x0F12, 0x01DD}, /* #senHal_pContSenModesRegsArray[45][2] 2 7000143E */ - {0x0F12, 0x029C}, /* #senHal_pContSenModesRegsArray[45][3] 2 70001440 */ - {0x0F12, 0x041D}, /* #senHal_pContSenModesRegsArray[46][0] 2 70001442 */ - {0x0F12, 0x04A9}, /* #senHal_pContSenModesRegsArray[46][1] 2 70001444 */ - {0x0F12, 0x025B}, /* #senHal_pContSenModesRegsArray[46][2] 2 70001446 */ - {0x0F12, 0x02E7}, /* #senHal_pContSenModesRegsArray[46][3] 2 70001448 */ - {0x0F12, 0x062D}, /* #senHal_pContSenModesRegsArray[47][0] 2 7000144A */ - {0x0F12, 0x0639}, /* #senHal_pContSenModesRegsArray[47][1] 2 7000144C */ - {0x0F12, 0x038A}, /* #senHal_pContSenModesRegsArray[47][2] 2 7000144E */ - {0x0F12, 0x0396}, /* #senHal_pContSenModesRegsArray[47][3] 2 70001450 */ - {0x0F12, 0x066C}, /* #senHal_pContSenModesRegsArray[48][0] 2 70001452 */ - {0x0F12, 0x06B7}, /* #senHal_pContSenModesRegsArray[48][1] 2 70001454 */ - {0x0F12, 0x03C9}, /* #senHal_pContSenModesRegsArray[48][2] 2 70001456 */ - {0x0F12, 0x0414}, /* #senHal_pContSenModesRegsArray[48][3] 2 70001458 */ - {0x0F12, 0x087C}, /* #senHal_pContSenModesRegsArray[49][0] 2 7000145A */ - {0x0F12, 0x08C7}, /* #senHal_pContSenModesRegsArray[49][1] 2 7000145C */ - {0x0F12, 0x04F8}, /* #senHal_pContSenModesRegsArray[49][2] 2 7000145E */ - {0x0F12, 0x0543}, /* #senHal_pContSenModesRegsArray[49][3] 2 70001460 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[50][0] 2 70001462 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[50][1] 2 70001464 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[50][2] 2 70001466 */ - {0x0F12, 0x003D}, /* #senHal_pContSenModesRegsArray[50][3] 2 70001468 */ - {0x0F12, 0x01D2}, /* #senHal_pContSenModesRegsArray[51][0] 2 7000146A */ - {0x0F12, 0x01D2}, /* #senHal_pContSenModesRegsArray[51][1] 2 7000146C */ - {0x0F12, 0x00F1}, /* #senHal_pContSenModesRegsArray[51][2] 2 7000146E */ - {0x0F12, 0x00F1}, /* #senHal_pContSenModesRegsArray[51][3] 2 70001470 */ - {0x0F12, 0x020C}, /* #senHal_pContSenModesRegsArray[52][0] 2 70001472 */ - {0x0F12, 0x024B}, /* #senHal_pContSenModesRegsArray[52][1] 2 70001474 */ - {0x0F12, 0x012B}, /* #senHal_pContSenModesRegsArray[52][2] 2 70001476 */ - {0x0F12, 0x016A}, /* #senHal_pContSenModesRegsArray[52][3] 2 70001478 */ - {0x0F12, 0x03A1}, /* #senHal_pContSenModesRegsArray[53][0] 2 7000147A */ - {0x0F12, 0x0460}, /* #senHal_pContSenModesRegsArray[53][1] 2 7000147C */ - {0x0F12, 0x01DF}, /* #senHal_pContSenModesRegsArray[53][2] 2 7000147E */ - {0x0F12, 0x029E}, /* #senHal_pContSenModesRegsArray[53][3] 2 70001480 */ - {0x0F12, 0x041A}, /* #senHal_pContSenModesRegsArray[54][0] 2 70001482 */ - {0x0F12, 0x04A6}, /* #senHal_pContSenModesRegsArray[54][1] 2 70001484 */ - {0x0F12, 0x0258}, /* #senHal_pContSenModesRegsArray[54][2] 2 70001486 */ - {0x0F12, 0x02E4}, /* #senHal_pContSenModesRegsArray[54][3] 2 70001488 */ - {0x0F12, 0x062F}, /* #senHal_pContSenModesRegsArray[55][0] 2 7000148A */ - {0x0F12, 0x063B}, /* #senHal_pContSenModesRegsArray[55][1] 2 7000148C */ - {0x0F12, 0x038C}, /* #senHal_pContSenModesRegsArray[55][2] 2 7000148E */ - {0x0F12, 0x0398}, /* #senHal_pContSenModesRegsArray[55][3] 2 70001490 */ - {0x0F12, 0x0669}, /* #senHal_pContSenModesRegsArray[56][0] 2 70001492 */ - {0x0F12, 0x06B4}, /* #senHal_pContSenModesRegsArray[56][1] 2 70001494 */ - {0x0F12, 0x03C6}, /* #senHal_pContSenModesRegsArray[56][2] 2 70001496 */ - {0x0F12, 0x0411}, /* #senHal_pContSenModesRegsArray[56][3] 2 70001498 */ - {0x0F12, 0x087E}, /* #senHal_pContSenModesRegsArray[57][0] 2 7000149A */ - {0x0F12, 0x08C9}, /* #senHal_pContSenModesRegsArray[57][1] 2 7000149C */ - {0x0F12, 0x04FA}, /* #senHal_pContSenModesRegsArray[57][2] 2 7000149E */ - {0x0F12, 0x0545}, /* #senHal_pContSenModesRegsArray[57][3] 2 700014A0 */ - {0x0F12, 0x03A2}, /* #senHal_pContSenModesRegsArray[58][0] 2 700014A2 */ - {0x0F12, 0x01D3}, /* #senHal_pContSenModesRegsArray[58][1] 2 700014A4 */ - {0x0F12, 0x01E0}, /* #senHal_pContSenModesRegsArray[58][2] 2 700014A6 */ - {0x0F12, 0x00F2}, /* #senHal_pContSenModesRegsArray[58][3] 2 700014A8 */ - {0x0F12, 0x03AF}, /* #senHal_pContSenModesRegsArray[59][0] 2 700014AA */ - {0x0F12, 0x01E0}, /* #senHal_pContSenModesRegsArray[59][1] 2 700014AC */ - {0x0F12, 0x01ED}, /* #senHal_pContSenModesRegsArray[59][2] 2 700014AE */ - {0x0F12, 0x00FF}, /* #senHal_pContSenModesRegsArray[59][3] 2 700014B0 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[60][0] 2 700014B2 */ - {0x0F12, 0x0461}, /* #senHal_pContSenModesRegsArray[60][1] 2 700014B4 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[60][2] 2 700014B6 */ - {0x0F12, 0x029F}, /* #senHal_pContSenModesRegsArray[60][3] 2 700014B8 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[61][0] 2 700014BA */ - {0x0F12, 0x046E}, /* #senHal_pContSenModesRegsArray[61][1] 2 700014BC */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[61][2] 2 700014BE */ - {0x0F12, 0x02AC}, /* #senHal_pContSenModesRegsArray[61][3] 2 700014C0 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[62][0] 2 700014C2 */ - {0x0F12, 0x063C}, /* #senHal_pContSenModesRegsArray[62][1] 2 700014C4 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[62][2] 2 700014C6 */ - {0x0F12, 0x0399}, /* #senHal_pContSenModesRegsArray[62][3] 2 700014C8 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[63][0] 2 700014CA */ - {0x0F12, 0x0649}, /* #senHal_pContSenModesRegsArray[63][1] 2 700014CC */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[63][2] 2 700014CE */ - {0x0F12, 0x03A6}, /* #senHal_pContSenModesRegsArray[63][3] 2 700014D0 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[64][0] 2 700014D2 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[64][1] 2 700014D4 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[64][2] 2 700014D6 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[64][3] 2 700014D8 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[65][0] 2 700014DA */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[65][1] 2 700014DC */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[65][2] 2 700014DE */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[65][3] 2 700014E0 */ - {0x0F12, 0x03AA}, /* #senHal_pContSenModesRegsArray[66][0] 2 700014E2 */ - {0x0F12, 0x01DB}, /* #senHal_pContSenModesRegsArray[66][1] 2 700014E4 */ - {0x0F12, 0x01E8}, /* #senHal_pContSenModesRegsArray[66][2] 2 700014E6 */ - {0x0F12, 0x00FA}, /* #senHal_pContSenModesRegsArray[66][3] 2 700014E8 */ - {0x0F12, 0x03B7}, /* #senHal_pContSenModesRegsArray[67][0] 2 700014EA */ - {0x0F12, 0x01E8}, /* #senHal_pContSenModesRegsArray[67][1] 2 700014EC */ - {0x0F12, 0x01F5}, /* #senHal_pContSenModesRegsArray[67][2] 2 700014EE */ - {0x0F12, 0x0107}, /* #senHal_pContSenModesRegsArray[67][3] 2 700014F0 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[68][0] 2 700014F2 */ - {0x0F12, 0x0469}, /* #senHal_pContSenModesRegsArray[68][1] 2 700014F4 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[68][2] 2 700014F6 */ - {0x0F12, 0x02A7}, /* #senHal_pContSenModesRegsArray[68][3] 2 700014F8 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[69][0] 2 700014FA */ - {0x0F12, 0x0476}, /* #senHal_pContSenModesRegsArray[69][1] 2 700014FC */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[69][2] 2 700014FE */ - {0x0F12, 0x02B4}, /* #senHal_pContSenModesRegsArray[69][3] 2 70001500 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[70][0] 2 70001502 */ - {0x0F12, 0x0644}, /* #senHal_pContSenModesRegsArray[70][1] 2 70001504 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[70][2] 2 70001506 */ - {0x0F12, 0x03A1}, /* #senHal_pContSenModesRegsArray[70][3] 2 70001508 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[71][0] 2 7000150A */ - {0x0F12, 0x0651}, /* #senHal_pContSenModesRegsArray[71][1] 2 7000150C */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[71][2] 2 7000150E */ - {0x0F12, 0x03AE}, /* #senHal_pContSenModesRegsArray[71][3] 2 70001510 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[72][0] 2 70001512 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[72][1] 2 70001514 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[72][2] 2 70001516 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[72][3] 2 70001518 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[73][0] 2 7000151A */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[73][1] 2 7000151C */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[73][2] 2 7000151E */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[73][3] 2 70001520 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[74][0] 2 70001522 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[74][1] 2 70001524 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[74][2] 2 70001526 */ - {0x0F12, 0x0001}, /* #senHal_pContSenModesRegsArray[74][3] 2 70001528 */ - {0x0F12, 0x000F}, /* #senHal_pContSenModesRegsArray[75][0] 2 7000152A */ - {0x0F12, 0x000F}, /* #senHal_pContSenModesRegsArray[75][1] 2 7000152C */ - {0x0F12, 0x000F}, /* #senHal_pContSenModesRegsArray[75][2] 2 7000152E */ - {0x0F12, 0x000F}, /* #senHal_pContSenModesRegsArray[75][3] 2 70001530 */ - {0x0F12, 0x05AD}, /* #senHal_pContSenModesRegsArray[76][0] 2 70001532 */ - {0x0F12, 0x03DE}, /* #senHal_pContSenModesRegsArray[76][1] 2 70001534 */ - {0x0F12, 0x030A}, /* #senHal_pContSenModesRegsArray[76][2] 2 70001536 */ - {0x0F12, 0x021C}, /* #senHal_pContSenModesRegsArray[76][3] 2 70001538 */ - {0x0F12, 0x062F}, /* #senHal_pContSenModesRegsArray[77][0] 2 7000153A */ - {0x0F12, 0x0460}, /* #senHal_pContSenModesRegsArray[77][1] 2 7000153C */ - {0x0F12, 0x038C}, /* #senHal_pContSenModesRegsArray[77][2] 2 7000153E */ - {0x0F12, 0x029E}, /* #senHal_pContSenModesRegsArray[77][3] 2 70001540 */ - {0x0F12, 0x07FC}, /* #senHal_pContSenModesRegsArray[78][0] 2 70001542 */ - {0x0F12, 0x0847}, /* #senHal_pContSenModesRegsArray[78][1] 2 70001544 */ - {0x0F12, 0x0478}, /* #senHal_pContSenModesRegsArray[78][2] 2 70001546 */ - {0x0F12, 0x04C3}, /* #senHal_pContSenModesRegsArray[78][3] 2 70001548 */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[79][0] 2 7000154A */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[79][1] 2 7000154C */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[79][2] 2 7000154E */ - {0x0F12, 0x0000}, /* #senHal_pContSenModesRegsArray[79][3] 2 70001550 */ - /* Analog Setting END */ - - /* ISP-FE Setting */ - {0x002A, 0x158A}, - {0x0F12, 0xEAF0}, - {0x002A, 0x15C6}, - {0x0F12, 0x0020}, - {0x0F12, 0x0060}, - {0x002A, 0x15BC}, - {0x0F12, 0x0200}, - /* Analog Offset for MSM */ - {0x002A, 0x1608}, - {0x0F12, 0x0100}, /* #gisp_msm_sAnalogOffset[0] */ - {0x0F12, 0x0100}, /* #gisp_msm_sAnalogOffset[1] */ - {0x0F12, 0x0100}, /* #gisp_msm_sAnalogOffset[2] */ - {0x0F12, 0x0100}, /* #gisp_msm_sAnalogOffset[3] */ - /* ISP-FE Setting END */ - - /* ===== Frame rate setting ===== */ - /* How to set */ - /* 1. Exposure value */ - /* dec2hex((1 / (frame rate you want(ms))) * 100d * 4d) */ - /* 2. Analog Digital gain */ - /* dec2hex((Analog gain you want) * 256d) */ - - /* Set preview exposure time */ - {0x002A, 0x0530}, - {0x0F12, 0x3415}, /* #lt_uMaxExp1 */ - {0x0F12, 0x0000}, - {0x0F12, 0x6720}, /* #lt_uMaxExp2 */ - {0x0F12, 0x0000}, - {0x002A, 0x167C}, - {0x0F12, 0x9AB0}, /* #evt1_lt_uMaxExp3 */ - {0x0F12, 0x0000}, - {0x0F12, 0xD055}, /* #evt1_lt_uMaxExp4 */ - {0x0F12, 0x0000}, - - /* Set capture exposure time */ - {0x002A, 0x0538}, - {0x0F12, 0x9C40}, /* #lt_uCapMaxExp1 */ - {0x0F12, 0x0000}, - {0x0F12, 0xD055}, /* #lt_uCapMaxExp2 */ - {0x0F12, 0x0000}, - {0x002A, 0x1684}, - {0x0F12, 0x0360}, /* #evt1_lt_uCapMaxExp3 */ - {0x0F12, 0x0001}, - {0x0F12, 0x3880}, /* #evt1_lt_uCapMaxExp4 */ - {0x0F12, 0x0001}, - - /* Set gain */ - {0x002A, 0x0540}, - {0x0F12, 0x0150}, /* #lt_uMaxAnGain1 */ - {0x0F12, 0x0280}, /* #lt_uMaxAnGain2 */ - {0x002A, 0x168C}, - {0x0F12, 0x02A0}, /* #evt1_lt_uMaxAnGain3 */ - {0x0F12, 0x0700}, /* #evt1_lt_uMaxAnGain4 */ - {0x002A, 0x0544}, - {0x0F12, 0x0100}, /* #lt_uMaxDigGain */ - {0x0F12, 0x1000}, /* #lt_uMaxTotGain */ - {0x002A, 0x1694}, - {0x0F12, 0x0001}, /* #evt1_senHal_bExpandForbid */ - {0x002A, 0x051A}, - {0x0F12, 0x0111}, /* #lt_uLimitHigh */ - {0x0F12, 0x00F0}, /* #lt_uLimitLow */ - {0x002A, 0x0562}, - {0x0F12, 0x0001}, - - /* Set Auto Exposure */ - /* AE target */ - {0x002A, 0x0F70}, - {0x0F12, 0x003A}, /* #TVAR_ae_BrAve */ - /* AE mode */ - {0x002A, 0x0F76}, /* Disable illumination & contrast #ae_StatMode */ - {0x0F12, 0x000F}, - /* AE weight */ - {0x002A, 0x0F7E}, - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_0_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_1_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_2_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_3_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_4_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_5_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_6_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_7_ */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_8_ */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_9_ */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_10 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_11 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_12 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_13 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_14 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_15 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_16 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_17 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_18 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_19 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_20 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_21 */ - {0x0F12, 0x0303}, /* #ae_WeightTbl_16_22 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_23 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_24 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_25 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_26 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_27 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_28 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_29 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_30 */ - {0x0F12, 0x0101}, /* #ae_WeightTbl_16_31 */ - - /* Set Flicker */ - {0x002A, 0x04D2}, - {0x0F12, 0x065F}, /* Anti-flicker disabled */ - {0x002A, 0x04BA}, - {0x0F12, 0x0002}, - {0x002A, 0x0C04}, - {0x0F12, 0xFFFF}, - - /* Set GAS */ - /* GAS alpha */ - /* R, Gr, Gb, B per light source */ - {0x002A, 0x06CE}, - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[0] Horizon */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[1] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[2] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[3] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[4] IncandA */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[5] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[6] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[7] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[8] WW */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[9] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[10] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[11] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[12] CWF */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[13] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[14] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[15] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[16] D50 */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[17] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[18] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[19] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[20] D65 */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[21] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[22] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[23] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASAlpha[24] D75 */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[25] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASAlpha[26] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASAlpha[27] */ - {0x0F12, 0x00ED}, /* #TVAR_ash_GASOutdoorAlpha[0] Outdoor*/ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASOutdoorAlpha[1] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_GASOutdoorAlpha[2] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_GASOutdoorAlpha[3] */ - - /* GAS beta */ - {0x0F12, 0x002D}, /* #ash_GASBeta[0] Horizon */ - {0x0F12, 0x0016}, /* #ash_GASBeta[1] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[2] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[3] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[4] IncandA */ - {0x0F12, 0x0016}, /* #ash_GASBeta[5] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[6] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[7] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[8] WW */ - {0x0F12, 0x0016}, /* #ash_GASBeta[9] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[10] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[11] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[12] CWF */ - {0x0F12, 0x0016}, /* #ash_GASBeta[13] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[14] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[15] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[16] D50 */ - {0x0F12, 0x0016}, /* #ash_GASBeta[17] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[18] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[19] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[20] D65 */ - {0x0F12, 0x0016}, /* #ash_GASBeta[21] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[22] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[23] */ - {0x0F12, 0x002D}, /* #ash_GASBeta[24] D75 */ - {0x0F12, 0x0016}, /* #ash_GASBeta[25] */ - {0x0F12, 0x0016}, /* #ash_GASBeta[26] */ - {0x0F12, 0x0000}, /* #ash_GASBeta[27] */ - {0x0F12, 0x002D}, /* #ash_GASOutdoorBeta[0] Outdoor */ - {0x0F12, 0x0016}, /* #ash_GASOutdoorBeta[1] */ - {0x0F12, 0x0016}, /* #ash_GASOutdoorBeta[2] */ - {0x0F12, 0x0000}, /* #ash_GASOutdoorBeta[3] */ - - {0x002A, 0x06B4}, - {0x0F12, 0x0001}, /* #wbt_bUseOutdoorASH ON:1 OFF:0 */ - - /* Parabolic function */ - {0x002A, 0x075A}, - {0x0F12, 0x0000}, /* #ash_bParabolicEstimation */ - {0x0F12, 0x0400}, /* #ash_uParabolicCenterX */ - {0x0F12, 0x0300}, /* #ash_uParabolicCenterY */ - {0x0F12, 0x0010}, /* #ash_uParabolicScalingA */ - {0x0F12, 0x0011}, /* #ash_uParabolicScalingB */ - {0x002A, 0x06C6}, - {0x0F12, 0x00ED}, /* ash_CGrasAlphas_0_ */ - {0x0F12, 0x00EB}, /* ash_CGrasAlphas_1_ */ - {0x0F12, 0x00EB}, /* ash_CGrasAlphas_2_ */ - {0x0F12, 0x00E9}, /* ash_CGrasAlphas_3_ */ - {0x002A, 0x0E3C}, - {0x0F12, 0x00C0}, /* #awbb_Alpha_Comp_Mode */ - {0x002A, 0x074E}, - {0x0F12, 0x0000}, /* #ash_bLumaMode - use Beta : 0001 not use Beta : 0000 */ - /* GAS LUT start address 7000_347C */ - {0x002A, 0x0754}, - {0x0F12, 0x347C}, - {0x0F12, 0x7000}, - - /* GAS LUT - param_start TVAR_ash_pGAS (Change the shading setting) */ - {0x002A, 0x347C}, - {0x0F12, 0x019D}, /* #TVAR_ash_pGAS[0] */ - {0x0F12, 0x0163}, /* #TVAR_ash_pGAS[1] */ - {0x0F12, 0x0137}, /* #TVAR_ash_pGAS[2] */ - {0x0F12, 0x010B}, /* #TVAR_ash_pGAS[3] */ - {0x0F12, 0x00EB}, /* #TVAR_ash_pGAS[4] */ - {0x0F12, 0x00D7}, /* #TVAR_ash_pGAS[5] */ - {0x0F12, 0x00D0}, /* #TVAR_ash_pGAS[6] */ - {0x0F12, 0x00D6}, /* #TVAR_ash_pGAS[7] */ - {0x0F12, 0x00EC}, /* #TVAR_ash_pGAS[8] */ - {0x0F12, 0x0119}, /* #TVAR_ash_pGAS[9] */ - {0x0F12, 0x014C}, /* #TVAR_ash_pGAS[10] */ - {0x0F12, 0x0181}, /* #TVAR_ash_pGAS[11] */ - {0x0F12, 0x01CE}, /* #TVAR_ash_pGAS[12] */ - {0x0F12, 0x017E}, /* #TVAR_ash_pGAS[13] */ - {0x0F12, 0x0149}, /* #TVAR_ash_pGAS[14] */ - {0x0F12, 0x010E}, /* #TVAR_ash_pGAS[15] */ - {0x0F12, 0x00DC}, /* #TVAR_ash_pGAS[16] */ - {0x0F12, 0x00B7}, /* #TVAR_ash_pGAS[17] */ - {0x0F12, 0x00A4}, /* #TVAR_ash_pGAS[18] */ - {0x0F12, 0x009E}, /* #TVAR_ash_pGAS[19] */ - {0x0F12, 0x00A3}, /* #TVAR_ash_pGAS[20] */ - {0x0F12, 0x00BD}, /* #TVAR_ash_pGAS[21] */ - {0x0F12, 0x00E6}, /* #TVAR_ash_pGAS[22] */ - {0x0F12, 0x0125}, /* #TVAR_ash_pGAS[23] */ - {0x0F12, 0x0169}, /* #TVAR_ash_pGAS[24] */ - {0x0F12, 0x019C}, /* #TVAR_ash_pGAS[25] */ - {0x0F12, 0x014F}, /* #TVAR_ash_pGAS[26] */ - {0x0F12, 0x010E}, /* #TVAR_ash_pGAS[27] */ - {0x0F12, 0x00CD}, /* #TVAR_ash_pGAS[28] */ - {0x0F12, 0x009B}, /* #TVAR_ash_pGAS[29] */ - {0x0F12, 0x0076}, /* #TVAR_ash_pGAS[30] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[31] */ - {0x0F12, 0x0058}, /* #TVAR_ash_pGAS[32] */ - {0x0F12, 0x0063}, /* #TVAR_ash_pGAS[33] */ - {0x0F12, 0x007E}, /* #TVAR_ash_pGAS[34] */ - {0x0F12, 0x00A9}, /* #TVAR_ash_pGAS[35] */ - {0x0F12, 0x00E7}, /* #TVAR_ash_pGAS[36] */ - {0x0F12, 0x0136}, /* #TVAR_ash_pGAS[37] */ - {0x0F12, 0x017E}, /* #TVAR_ash_pGAS[38] */ - {0x0F12, 0x0129}, /* #TVAR_ash_pGAS[39] */ - {0x0F12, 0x00E1}, /* #TVAR_ash_pGAS[40] */ - {0x0F12, 0x009F}, /* #TVAR_ash_pGAS[41] */ - {0x0F12, 0x006B}, /* #TVAR_ash_pGAS[42] */ - {0x0F12, 0x0046}, /* #TVAR_ash_pGAS[43] */ - {0x0F12, 0x0030}, /* #TVAR_ash_pGAS[44] */ - {0x0F12, 0x0029}, /* #TVAR_ash_pGAS[45] */ - {0x0F12, 0x0033}, /* #TVAR_ash_pGAS[46] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[47] */ - {0x0F12, 0x007F}, /* #TVAR_ash_pGAS[48] */ - {0x0F12, 0x00BD}, /* #TVAR_ash_pGAS[49] */ - {0x0F12, 0x0111}, /* #TVAR_ash_pGAS[50] */ - {0x0F12, 0x015D}, /* #TVAR_ash_pGAS[51] */ - {0x0F12, 0x0110}, /* #TVAR_ash_pGAS[52] */ - {0x0F12, 0x00C6}, /* #TVAR_ash_pGAS[53] */ - {0x0F12, 0x0082}, /* #TVAR_ash_pGAS[54] */ - {0x0F12, 0x004B}, /* #TVAR_ash_pGAS[55] */ - {0x0F12, 0x0026}, /* #TVAR_ash_pGAS[56] */ - {0x0F12, 0x0011}, /* #TVAR_ash_pGAS[57] */ - {0x0F12, 0x000C}, /* #TVAR_ash_pGAS[58] */ - {0x0F12, 0x0016}, /* #TVAR_ash_pGAS[59] */ - {0x0F12, 0x0032}, /* #TVAR_ash_pGAS[60] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[61] */ - {0x0F12, 0x00A1}, /* #TVAR_ash_pGAS[62] */ - {0x0F12, 0x00F4}, /* #TVAR_ash_pGAS[63] */ - {0x0F12, 0x014C}, /* #TVAR_ash_pGAS[64] */ - {0x0F12, 0x0102}, /* #TVAR_ash_pGAS[65] */ - {0x0F12, 0x00BB}, /* #TVAR_ash_pGAS[66] */ - {0x0F12, 0x0075}, /* #TVAR_ash_pGAS[67] */ - {0x0F12, 0x003F}, /* #TVAR_ash_pGAS[68] */ - {0x0F12, 0x0019}, /* #TVAR_ash_pGAS[69] */ - {0x0F12, 0x0005}, /* #TVAR_ash_pGAS[70] */ - {0x0F12, 0x0000}, /* #TVAR_ash_pGAS[71] */ - {0x0F12, 0x000A}, /* #TVAR_ash_pGAS[72] */ - {0x0F12, 0x0025}, /* #TVAR_ash_pGAS[73] */ - {0x0F12, 0x0055}, /* #TVAR_ash_pGAS[74] */ - {0x0F12, 0x0098}, /* #TVAR_ash_pGAS[75] */ - {0x0F12, 0x00EA}, /* #TVAR_ash_pGAS[76] */ - {0x0F12, 0x0143}, /* #TVAR_ash_pGAS[77] */ - {0x0F12, 0x0106}, /* #TVAR_ash_pGAS[78] */ - {0x0F12, 0x00BF}, /* #TVAR_ash_pGAS[79] */ - {0x0F12, 0x007B}, /* #TVAR_ash_pGAS[80] */ - {0x0F12, 0x0043}, /* #TVAR_ash_pGAS[81] */ - {0x0F12, 0x001F}, /* #TVAR_ash_pGAS[82] */ - {0x0F12, 0x000D}, /* #TVAR_ash_pGAS[83] */ - {0x0F12, 0x0006}, /* #TVAR_ash_pGAS[84] */ - {0x0F12, 0x0010}, /* #TVAR_ash_pGAS[85] */ - {0x0F12, 0x002C}, /* #TVAR_ash_pGAS[86] */ - {0x0F12, 0x005D}, /* #TVAR_ash_pGAS[87] */ - {0x0F12, 0x009D}, /* #TVAR_ash_pGAS[88] */ - {0x0F12, 0x00F2}, /* #TVAR_ash_pGAS[89] */ - {0x0F12, 0x0147}, /* #TVAR_ash_pGAS[90] */ - {0x0F12, 0x0115}, /* #TVAR_ash_pGAS[91] */ - {0x0F12, 0x00D2}, /* #TVAR_ash_pGAS[92] */ - {0x0F12, 0x008C}, /* #TVAR_ash_pGAS[93] */ - {0x0F12, 0x0059}, /* #TVAR_ash_pGAS[94] */ - {0x0F12, 0x0034}, /* #TVAR_ash_pGAS[95] */ - {0x0F12, 0x0022}, /* #TVAR_ash_pGAS[96] */ - {0x0F12, 0x001B}, /* #TVAR_ash_pGAS[97] */ - {0x0F12, 0x0027}, /* #TVAR_ash_pGAS[98] */ - {0x0F12, 0x0047}, /* #TVAR_ash_pGAS[99] */ - {0x0F12, 0x0077}, /* #TVAR_ash_pGAS[100] */ - {0x0F12, 0x00B6}, /* #TVAR_ash_pGAS[101] */ - {0x0F12, 0x0108}, /* #TVAR_ash_pGAS[102] */ - {0x0F12, 0x015F}, /* #TVAR_ash_pGAS[103] */ - {0x0F12, 0x0136}, /* #TVAR_ash_pGAS[104] */ - {0x0F12, 0x00F1}, /* #TVAR_ash_pGAS[105] */ - {0x0F12, 0x00AE}, /* #TVAR_ash_pGAS[106] */ - {0x0F12, 0x007C}, /* #TVAR_ash_pGAS[107] */ - {0x0F12, 0x0058}, /* #TVAR_ash_pGAS[108] */ - {0x0F12, 0x0046}, /* #TVAR_ash_pGAS[109] */ - {0x0F12, 0x0040}, /* #TVAR_ash_pGAS[110] */ - {0x0F12, 0x004E}, /* #TVAR_ash_pGAS[111] */ - {0x0F12, 0x006C}, /* #TVAR_ash_pGAS[112] */ - {0x0F12, 0x009C}, /* #TVAR_ash_pGAS[113] */ - {0x0F12, 0x00DB}, /* #TVAR_ash_pGAS[114] */ - {0x0F12, 0x012F}, /* #TVAR_ash_pGAS[115] */ - {0x0F12, 0x017C}, /* #TVAR_ash_pGAS[116] */ - {0x0F12, 0x015C}, /* #TVAR_ash_pGAS[117] */ - {0x0F12, 0x0120}, /* #TVAR_ash_pGAS[118] */ - {0x0F12, 0x00DF}, /* #TVAR_ash_pGAS[119] */ - {0x0F12, 0x00AF}, /* #TVAR_ash_pGAS[120] */ - {0x0F12, 0x008F}, /* #TVAR_ash_pGAS[121] */ - {0x0F12, 0x007D}, /* #TVAR_ash_pGAS[122] */ - {0x0F12, 0x0079}, /* #TVAR_ash_pGAS[123] */ - {0x0F12, 0x0084}, /* #TVAR_ash_pGAS[124] */ - {0x0F12, 0x00A3}, /* #TVAR_ash_pGAS[125] */ - {0x0F12, 0x00D1}, /* #TVAR_ash_pGAS[126] */ - {0x0F12, 0x0110}, /* #TVAR_ash_pGAS[127] */ - {0x0F12, 0x015E}, /* #TVAR_ash_pGAS[128] */ - {0x0F12, 0x019A}, /* #TVAR_ash_pGAS[129] */ - {0x0F12, 0x0178}, /* #TVAR_ash_pGAS[130] */ - {0x0F12, 0x0144}, /* #TVAR_ash_pGAS[131] */ - {0x0F12, 0x010C}, /* #TVAR_ash_pGAS[132] */ - {0x0F12, 0x00DF}, /* #TVAR_ash_pGAS[133] */ - {0x0F12, 0x00C1}, /* #TVAR_ash_pGAS[134] */ - {0x0F12, 0x00B3}, /* #TVAR_ash_pGAS[135] */ - {0x0F12, 0x00B0}, /* #TVAR_ash_pGAS[136] */ - {0x0F12, 0x00BC}, /* #TVAR_ash_pGAS[137] */ - {0x0F12, 0x00D6}, /* #TVAR_ash_pGAS[138] */ - {0x0F12, 0x0103}, /* #TVAR_ash_pGAS[139] */ - {0x0F12, 0x0144}, /* #TVAR_ash_pGAS[140] */ - {0x0F12, 0x0187}, /* #TVAR_ash_pGAS[141] */ - {0x0F12, 0x01C2}, /* #TVAR_ash_pGAS[142] */ - {0x0F12, 0x0167}, /* #TVAR_ash_pGAS[143] */ - {0x0F12, 0x013A}, /* #TVAR_ash_pGAS[144] */ - {0x0F12, 0x010D}, /* #TVAR_ash_pGAS[145] */ - {0x0F12, 0x00E5}, /* #TVAR_ash_pGAS[146] */ - {0x0F12, 0x00C6}, /* #TVAR_ash_pGAS[147] */ - {0x0F12, 0x00B7}, /* #TVAR_ash_pGAS[148] */ - {0x0F12, 0x00B0}, /* #TVAR_ash_pGAS[149] */ - {0x0F12, 0x00B6}, /* #TVAR_ash_pGAS[150] */ - {0x0F12, 0x00C9}, /* #TVAR_ash_pGAS[151] */ - {0x0F12, 0x00EC}, /* #TVAR_ash_pGAS[152] */ - {0x0F12, 0x011C}, /* #TVAR_ash_pGAS[153] */ - {0x0F12, 0x014B}, /* #TVAR_ash_pGAS[154] */ - {0x0F12, 0x0192}, /* #TVAR_ash_pGAS[155] */ - {0x0F12, 0x0155}, /* #TVAR_ash_pGAS[156] */ - {0x0F12, 0x0125}, /* #TVAR_ash_pGAS[157] */ - {0x0F12, 0x00EE}, /* #TVAR_ash_pGAS[158] */ - {0x0F12, 0x00BF}, /* #TVAR_ash_pGAS[159] */ - {0x0F12, 0x00A2}, /* #TVAR_ash_pGAS[160] */ - {0x0F12, 0x008D}, /* #TVAR_ash_pGAS[161] */ - {0x0F12, 0x0087}, /* #TVAR_ash_pGAS[162] */ - {0x0F12, 0x008F}, /* #TVAR_ash_pGAS[163] */ - {0x0F12, 0x00A1}, /* #TVAR_ash_pGAS[164] */ - {0x0F12, 0x00C5}, /* #TVAR_ash_pGAS[165] */ - {0x0F12, 0x00F8}, /* #TVAR_ash_pGAS[166] */ - {0x0F12, 0x0135}, /* #TVAR_ash_pGAS[167] */ - {0x0F12, 0x0166}, /* #TVAR_ash_pGAS[168] */ - {0x0F12, 0x012F}, /* #TVAR_ash_pGAS[169] */ - {0x0F12, 0x00F2}, /* #TVAR_ash_pGAS[170] */ - {0x0F12, 0x00B6}, /* #TVAR_ash_pGAS[171] */ - {0x0F12, 0x0089}, /* #TVAR_ash_pGAS[172] */ - {0x0F12, 0x0068}, /* #TVAR_ash_pGAS[173] */ - {0x0F12, 0x0055}, /* #TVAR_ash_pGAS[174] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[175] */ - {0x0F12, 0x0058}, /* #TVAR_ash_pGAS[176] */ - {0x0F12, 0x006E}, /* #TVAR_ash_pGAS[177] */ - {0x0F12, 0x0092}, /* #TVAR_ash_pGAS[178] */ - {0x0F12, 0x00C5}, /* #TVAR_ash_pGAS[179] */ - {0x0F12, 0x0109}, /* #TVAR_ash_pGAS[180] */ - {0x0F12, 0x0147}, /* #TVAR_ash_pGAS[181] */ - {0x0F12, 0x010D}, /* #TVAR_ash_pGAS[182] */ - {0x0F12, 0x00C9}, /* #TVAR_ash_pGAS[183] */ - {0x0F12, 0x008E}, /* #TVAR_ash_pGAS[184] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[185] */ - {0x0F12, 0x003E}, /* #TVAR_ash_pGAS[186] */ - {0x0F12, 0x002A}, /* #TVAR_ash_pGAS[187] */ - {0x0F12, 0x0025}, /* #TVAR_ash_pGAS[188] */ - {0x0F12, 0x002F}, /* #TVAR_ash_pGAS[189] */ - {0x0F12, 0x0047}, /* #TVAR_ash_pGAS[190] */ - {0x0F12, 0x006F}, /* #TVAR_ash_pGAS[191] */ - {0x0F12, 0x00A2}, /* #TVAR_ash_pGAS[192] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_pGAS[193] */ - {0x0F12, 0x0130}, /* #TVAR_ash_pGAS[194] */ - {0x0F12, 0x00F3}, /* #TVAR_ash_pGAS[195] */ - {0x0F12, 0x00B1}, /* #TVAR_ash_pGAS[196] */ - {0x0F12, 0x0076}, /* #TVAR_ash_pGAS[197] */ - {0x0F12, 0x0045}, /* #TVAR_ash_pGAS[198] */ - {0x0F12, 0x0022}, /* #TVAR_ash_pGAS[199] */ - {0x0F12, 0x000F}, /* #TVAR_ash_pGAS[200] */ - {0x0F12, 0x000A}, /* #TVAR_ash_pGAS[201] */ - {0x0F12, 0x0015}, /* #TVAR_ash_pGAS[202] */ - {0x0F12, 0x002E}, /* #TVAR_ash_pGAS[203] */ - {0x0F12, 0x0058}, /* #TVAR_ash_pGAS[204] */ - {0x0F12, 0x008D}, /* #TVAR_ash_pGAS[205] */ - {0x0F12, 0x00D4}, /* #TVAR_ash_pGAS[206] */ - {0x0F12, 0x011A}, /* #TVAR_ash_pGAS[207] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_pGAS[208] */ - {0x0F12, 0x00A7}, /* #TVAR_ash_pGAS[209] */ - {0x0F12, 0x0068}, /* #TVAR_ash_pGAS[210] */ - {0x0F12, 0x0038}, /* #TVAR_ash_pGAS[211] */ - {0x0F12, 0x0017}, /* #TVAR_ash_pGAS[212] */ - {0x0F12, 0x0004}, /* #TVAR_ash_pGAS[213] */ - {0x0F12, 0x0000}, /* #TVAR_ash_pGAS[214] */ - {0x0F12, 0x000B}, /* #TVAR_ash_pGAS[215] */ - {0x0F12, 0x0025}, /* #TVAR_ash_pGAS[216] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[217] */ - {0x0F12, 0x0084}, /* #TVAR_ash_pGAS[218] */ - {0x0F12, 0x00CB}, /* #TVAR_ash_pGAS[219] */ - {0x0F12, 0x0117}, /* #TVAR_ash_pGAS[220] */ - {0x0F12, 0x00EA}, /* #TVAR_ash_pGAS[221] */ - {0x0F12, 0x00A8}, /* #TVAR_ash_pGAS[222] */ - {0x0F12, 0x006E}, /* #TVAR_ash_pGAS[223] */ - {0x0F12, 0x003D}, /* #TVAR_ash_pGAS[224] */ - {0x0F12, 0x001B}, /* #TVAR_ash_pGAS[225] */ - {0x0F12, 0x0009}, /* #TVAR_ash_pGAS[226] */ - {0x0F12, 0x0006}, /* #TVAR_ash_pGAS[227] */ - {0x0F12, 0x0010}, /* #TVAR_ash_pGAS[228] */ - {0x0F12, 0x002B}, /* #TVAR_ash_pGAS[229] */ - {0x0F12, 0x0056}, /* #TVAR_ash_pGAS[230] */ - {0x0F12, 0x008B}, /* #TVAR_ash_pGAS[231] */ - {0x0F12, 0x00D1}, /* #TVAR_ash_pGAS[232] */ - {0x0F12, 0x011B}, /* #TVAR_ash_pGAS[233] */ - {0x0F12, 0x00F9}, /* #TVAR_ash_pGAS[234] */ - {0x0F12, 0x00B6}, /* #TVAR_ash_pGAS[235] */ - {0x0F12, 0x007D}, /* #TVAR_ash_pGAS[236] */ - {0x0F12, 0x004E}, /* #TVAR_ash_pGAS[237] */ - {0x0F12, 0x002D}, /* #TVAR_ash_pGAS[238] */ - {0x0F12, 0x001C}, /* #TVAR_ash_pGAS[239] */ - {0x0F12, 0x0019}, /* #TVAR_ash_pGAS[240] */ - {0x0F12, 0x0025}, /* #TVAR_ash_pGAS[241] */ - {0x0F12, 0x0042}, /* #TVAR_ash_pGAS[242] */ - {0x0F12, 0x006C}, /* #TVAR_ash_pGAS[243] */ - {0x0F12, 0x00A0}, /* #TVAR_ash_pGAS[244] */ - {0x0F12, 0x00E6}, /* #TVAR_ash_pGAS[245] */ - {0x0F12, 0x0130}, /* #TVAR_ash_pGAS[246] */ - {0x0F12, 0x0114}, /* #TVAR_ash_pGAS[247] */ - {0x0F12, 0x00D5}, /* #TVAR_ash_pGAS[248] */ - {0x0F12, 0x0099}, /* #TVAR_ash_pGAS[249] */ - {0x0F12, 0x006D}, /* #TVAR_ash_pGAS[250] */ - {0x0F12, 0x004E}, /* #TVAR_ash_pGAS[251] */ - {0x0F12, 0x003E}, /* #TVAR_ash_pGAS[252] */ - {0x0F12, 0x003C}, /* #TVAR_ash_pGAS[253] */ - {0x0F12, 0x0049}, /* #TVAR_ash_pGAS[254] */ - {0x0F12, 0x0065}, /* #TVAR_ash_pGAS[255] */ - {0x0F12, 0x008D}, /* #TVAR_ash_pGAS[256] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[257] */ - {0x0F12, 0x0109}, /* #TVAR_ash_pGAS[258] */ - {0x0F12, 0x014C}, /* #TVAR_ash_pGAS[259] */ - {0x0F12, 0x0135}, /* #TVAR_ash_pGAS[260] */ - {0x0F12, 0x00FC}, /* #TVAR_ash_pGAS[261] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[262] */ - {0x0F12, 0x0099}, /* #TVAR_ash_pGAS[263] */ - {0x0F12, 0x007D}, /* #TVAR_ash_pGAS[264] */ - {0x0F12, 0x006F}, /* #TVAR_ash_pGAS[265] */ - {0x0F12, 0x006D}, /* #TVAR_ash_pGAS[266] */ - {0x0F12, 0x007C}, /* #TVAR_ash_pGAS[267] */ - {0x0F12, 0x0095}, /* #TVAR_ash_pGAS[268] */ - {0x0F12, 0x00BC}, /* #TVAR_ash_pGAS[269] */ - {0x0F12, 0x00F1}, /* #TVAR_ash_pGAS[270] */ - {0x0F12, 0x0135}, /* #TVAR_ash_pGAS[271] */ - {0x0F12, 0x016E}, /* #TVAR_ash_pGAS[272] */ - {0x0F12, 0x0154}, /* #TVAR_ash_pGAS[273] */ - {0x0F12, 0x011D}, /* #TVAR_ash_pGAS[274] */ - {0x0F12, 0x00E9}, /* #TVAR_ash_pGAS[275] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[276] */ - {0x0F12, 0x00A7}, /* #TVAR_ash_pGAS[277] */ - {0x0F12, 0x009C}, /* #TVAR_ash_pGAS[278] */ - {0x0F12, 0x009B}, /* #TVAR_ash_pGAS[279] */ - {0x0F12, 0x00A8}, /* #TVAR_ash_pGAS[280] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[281] */ - {0x0F12, 0x00E8}, /* #TVAR_ash_pGAS[282] */ - {0x0F12, 0x011C}, /* #TVAR_ash_pGAS[283] */ - {0x0F12, 0x015C}, /* #TVAR_ash_pGAS[284] */ - {0x0F12, 0x018F}, /* #TVAR_ash_pGAS[285] */ - {0x0F12, 0x0158}, /* #TVAR_ash_pGAS[286] */ - {0x0F12, 0x012B}, /* #TVAR_ash_pGAS[287] */ - {0x0F12, 0x0100}, /* #TVAR_ash_pGAS[288] */ - {0x0F12, 0x00DA}, /* #TVAR_ash_pGAS[289] */ - {0x0F12, 0x00BF}, /* #TVAR_ash_pGAS[290] */ - {0x0F12, 0x00AE}, /* #TVAR_ash_pGAS[291] */ - {0x0F12, 0x00AD}, /* #TVAR_ash_pGAS[292] */ - {0x0F12, 0x00B8}, /* #TVAR_ash_pGAS[293] */ - {0x0F12, 0x00D2}, /* #TVAR_ash_pGAS[294] */ - {0x0F12, 0x00FB}, /* #TVAR_ash_pGAS[295] */ - {0x0F12, 0x012C}, /* #TVAR_ash_pGAS[296] */ - {0x0F12, 0x015B}, /* #TVAR_ash_pGAS[297] */ - {0x0F12, 0x01A0}, /* #TVAR_ash_pGAS[298] */ - {0x0F12, 0x0150}, /* #TVAR_ash_pGAS[299] */ - {0x0F12, 0x011F}, /* #TVAR_ash_pGAS[300] */ - {0x0F12, 0x00E7}, /* #TVAR_ash_pGAS[301] */ - {0x0F12, 0x00BA}, /* #TVAR_ash_pGAS[302] */ - {0x0F12, 0x009D}, /* #TVAR_ash_pGAS[303] */ - {0x0F12, 0x008C}, /* #TVAR_ash_pGAS[304] */ - {0x0F12, 0x008B}, /* #TVAR_ash_pGAS[305] */ - {0x0F12, 0x0095}, /* #TVAR_ash_pGAS[306] */ - {0x0F12, 0x00AF}, /* #TVAR_ash_pGAS[307] */ - {0x0F12, 0x00D6}, /* #TVAR_ash_pGAS[308] */ - {0x0F12, 0x010E}, /* #TVAR_ash_pGAS[309] */ - {0x0F12, 0x014C}, /* #TVAR_ash_pGAS[310] */ - {0x0F12, 0x017C}, /* #TVAR_ash_pGAS[311] */ - {0x0F12, 0x012E}, /* #TVAR_ash_pGAS[312] */ - {0x0F12, 0x00EE}, /* #TVAR_ash_pGAS[313] */ - {0x0F12, 0x00B4}, /* #TVAR_ash_pGAS[314] */ - {0x0F12, 0x0088}, /* #TVAR_ash_pGAS[315] */ - {0x0F12, 0x0068}, /* #TVAR_ash_pGAS[316] */ - {0x0F12, 0x0055}, /* #TVAR_ash_pGAS[317] */ - {0x0F12, 0x0050}, /* #TVAR_ash_pGAS[318] */ - {0x0F12, 0x005E}, /* #TVAR_ash_pGAS[319] */ - {0x0F12, 0x007A}, /* #TVAR_ash_pGAS[320] */ - {0x0F12, 0x00A4}, /* #TVAR_ash_pGAS[321] */ - {0x0F12, 0x00DA}, /* #TVAR_ash_pGAS[322] */ - {0x0F12, 0x0121}, /* #TVAR_ash_pGAS[323] */ - {0x0F12, 0x0161}, /* #TVAR_ash_pGAS[324] */ - {0x0F12, 0x010B}, /* #TVAR_ash_pGAS[325] */ - {0x0F12, 0x00C9}, /* #TVAR_ash_pGAS[326] */ - {0x0F12, 0x008E}, /* #TVAR_ash_pGAS[327] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[328] */ - {0x0F12, 0x003F}, /* #TVAR_ash_pGAS[329] */ - {0x0F12, 0x002B}, /* #TVAR_ash_pGAS[330] */ - {0x0F12, 0x0028}, /* #TVAR_ash_pGAS[331] */ - {0x0F12, 0x0034}, /* #TVAR_ash_pGAS[332] */ - {0x0F12, 0x0052}, /* #TVAR_ash_pGAS[333] */ - {0x0F12, 0x007D}, /* #TVAR_ash_pGAS[334] */ - {0x0F12, 0x00B4}, /* #TVAR_ash_pGAS[335] */ - {0x0F12, 0x00F9}, /* #TVAR_ash_pGAS[336] */ - {0x0F12, 0x0141}, /* #TVAR_ash_pGAS[337] */ - {0x0F12, 0x00F9}, /* #TVAR_ash_pGAS[338] */ - {0x0F12, 0x00B3}, /* #TVAR_ash_pGAS[339] */ - {0x0F12, 0x0079}, /* #TVAR_ash_pGAS[340] */ - {0x0F12, 0x0048}, /* #TVAR_ash_pGAS[341] */ - {0x0F12, 0x0024}, /* #TVAR_ash_pGAS[342] */ - {0x0F12, 0x0010}, /* #TVAR_ash_pGAS[343] */ - {0x0F12, 0x000C}, /* #TVAR_ash_pGAS[344] */ - {0x0F12, 0x0018}, /* #TVAR_ash_pGAS[345] */ - {0x0F12, 0x0035}, /* #TVAR_ash_pGAS[346] */ - {0x0F12, 0x0062}, /* #TVAR_ash_pGAS[347] */ - {0x0F12, 0x009A}, /* #TVAR_ash_pGAS[348] */ - {0x0F12, 0x00DF}, /* #TVAR_ash_pGAS[349] */ - {0x0F12, 0x0128}, /* #TVAR_ash_pGAS[350] */ - {0x0F12, 0x00F2}, /* #TVAR_ash_pGAS[351] */ - {0x0F12, 0x00AE}, /* #TVAR_ash_pGAS[352] */ - {0x0F12, 0x0071}, /* #TVAR_ash_pGAS[353] */ - {0x0F12, 0x003E}, /* #TVAR_ash_pGAS[354] */ - {0x0F12, 0x001B}, /* #TVAR_ash_pGAS[355] */ - {0x0F12, 0x0005}, /* #TVAR_ash_pGAS[356] */ - {0x0F12, 0x0000}, /* #TVAR_ash_pGAS[357] */ - {0x0F12, 0x000C}, /* #TVAR_ash_pGAS[358] */ - {0x0F12, 0x0029}, /* #TVAR_ash_pGAS[359] */ - {0x0F12, 0x0053}, /* #TVAR_ash_pGAS[360] */ - {0x0F12, 0x008A}, /* #TVAR_ash_pGAS[361] */ - {0x0F12, 0x00D1}, /* #TVAR_ash_pGAS[362] */ - {0x0F12, 0x0118}, /* #TVAR_ash_pGAS[363] */ - {0x0F12, 0x00F4}, /* #TVAR_ash_pGAS[364] */ - {0x0F12, 0x00B2}, /* #TVAR_ash_pGAS[365] */ - {0x0F12, 0x0076}, /* #TVAR_ash_pGAS[366] */ - {0x0F12, 0x0044}, /* #TVAR_ash_pGAS[367] */ - {0x0F12, 0x0020}, /* #TVAR_ash_pGAS[368] */ - {0x0F12, 0x000B}, /* #TVAR_ash_pGAS[369] */ - {0x0F12, 0x0005}, /* #TVAR_ash_pGAS[370] */ - {0x0F12, 0x000F}, /* #TVAR_ash_pGAS[371] */ - {0x0F12, 0x002C}, /* #TVAR_ash_pGAS[372] */ - {0x0F12, 0x0055}, /* #TVAR_ash_pGAS[373] */ - {0x0F12, 0x008A}, /* #TVAR_ash_pGAS[374] */ - {0x0F12, 0x00CF}, /* #TVAR_ash_pGAS[375] */ - {0x0F12, 0x0117}, /* #TVAR_ash_pGAS[376] */ - {0x0F12, 0x0106}, /* #TVAR_ash_pGAS[377] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[378] */ - {0x0F12, 0x0088}, /* #TVAR_ash_pGAS[379] */ - {0x0F12, 0x0057}, /* #TVAR_ash_pGAS[380] */ - {0x0F12, 0x0033}, /* #TVAR_ash_pGAS[381] */ - {0x0F12, 0x001F}, /* #TVAR_ash_pGAS[382] */ - {0x0F12, 0x0017}, /* #TVAR_ash_pGAS[383] */ - {0x0F12, 0x0021}, /* #TVAR_ash_pGAS[384] */ - {0x0F12, 0x003C}, /* #TVAR_ash_pGAS[385] */ - {0x0F12, 0x0065}, /* #TVAR_ash_pGAS[386] */ - {0x0F12, 0x0099}, /* #TVAR_ash_pGAS[387] */ - {0x0F12, 0x00DC}, /* #TVAR_ash_pGAS[388] */ - {0x0F12, 0x0125}, /* #TVAR_ash_pGAS[389] */ - {0x0F12, 0x0125}, /* #TVAR_ash_pGAS[390] */ - {0x0F12, 0x00E2}, /* #TVAR_ash_pGAS[391] */ - {0x0F12, 0x00A4}, /* #TVAR_ash_pGAS[392] */ - {0x0F12, 0x0077}, /* #TVAR_ash_pGAS[393] */ - {0x0F12, 0x0053}, /* #TVAR_ash_pGAS[394] */ - {0x0F12, 0x003F}, /* #TVAR_ash_pGAS[395] */ - {0x0F12, 0x0038}, /* #TVAR_ash_pGAS[396] */ - {0x0F12, 0x0042}, /* #TVAR_ash_pGAS[397] */ - {0x0F12, 0x005B}, /* #TVAR_ash_pGAS[398] */ - {0x0F12, 0x0081}, /* #TVAR_ash_pGAS[399] */ - {0x0F12, 0x00B3}, /* #TVAR_ash_pGAS[400] */ - {0x0F12, 0x00F8}, /* #TVAR_ash_pGAS[401] */ - {0x0F12, 0x013D}, /* #TVAR_ash_pGAS[402] */ - {0x0F12, 0x0148}, /* #TVAR_ash_pGAS[403] */ - {0x0F12, 0x010C}, /* #TVAR_ash_pGAS[404] */ - {0x0F12, 0x00D2}, /* #TVAR_ash_pGAS[405] */ - {0x0F12, 0x00A4}, /* #TVAR_ash_pGAS[406] */ - {0x0F12, 0x0084}, /* #TVAR_ash_pGAS[407] */ - {0x0F12, 0x0071}, /* #TVAR_ash_pGAS[408] */ - {0x0F12, 0x006A}, /* #TVAR_ash_pGAS[409] */ - {0x0F12, 0x0072}, /* #TVAR_ash_pGAS[410] */ - {0x0F12, 0x0089}, /* #TVAR_ash_pGAS[411] */ - {0x0F12, 0x00AC}, /* #TVAR_ash_pGAS[412] */ - {0x0F12, 0x00DE}, /* #TVAR_ash_pGAS[413] */ - {0x0F12, 0x011E}, /* #TVAR_ash_pGAS[414] */ - {0x0F12, 0x015A}, /* #TVAR_ash_pGAS[415] */ - {0x0F12, 0x0167}, /* #TVAR_ash_pGAS[416] */ - {0x0F12, 0x0130}, /* #TVAR_ash_pGAS[417] */ - {0x0F12, 0x00FC}, /* #TVAR_ash_pGAS[418] */ - {0x0F12, 0x00D1}, /* #TVAR_ash_pGAS[419] */ - {0x0F12, 0x00B5}, /* #TVAR_ash_pGAS[420] */ - {0x0F12, 0x00A2}, /* #TVAR_ash_pGAS[421] */ - {0x0F12, 0x009D}, /* #TVAR_ash_pGAS[422] */ - {0x0F12, 0x00A2}, /* #TVAR_ash_pGAS[423] */ - {0x0F12, 0x00B8}, /* #TVAR_ash_pGAS[424] */ - {0x0F12, 0x00D9}, /* #TVAR_ash_pGAS[425] */ - {0x0F12, 0x0106}, /* #TVAR_ash_pGAS[426] */ - {0x0F12, 0x0140}, /* #TVAR_ash_pGAS[427] */ - {0x0F12, 0x0174}, /* #TVAR_ash_pGAS[428] */ - {0x0F12, 0x0139}, /* #TVAR_ash_pGAS[429] */ - {0x0F12, 0x0111}, /* #TVAR_ash_pGAS[430] */ - {0x0F12, 0x00EC}, /* #TVAR_ash_pGAS[431] */ - {0x0F12, 0x00C6}, /* #TVAR_ash_pGAS[432] */ - {0x0F12, 0x00AF}, /* #TVAR_ash_pGAS[433] */ - {0x0F12, 0x00A4}, /* #TVAR_ash_pGAS[434] */ - {0x0F12, 0x00A2}, /* #TVAR_ash_pGAS[435] */ - {0x0F12, 0x00AD}, /* #TVAR_ash_pGAS[436] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[437] */ - {0x0F12, 0x00E6}, /* #TVAR_ash_pGAS[438] */ - {0x0F12, 0x0111}, /* #TVAR_ash_pGAS[439] */ - {0x0F12, 0x0141}, /* #TVAR_ash_pGAS[440] */ - {0x0F12, 0x017D}, /* #TVAR_ash_pGAS[441] */ - {0x0F12, 0x012B}, /* #TVAR_ash_pGAS[442] */ - {0x0F12, 0x00FF}, /* #TVAR_ash_pGAS[443] */ - {0x0F12, 0x00CD}, /* #TVAR_ash_pGAS[444] */ - {0x0F12, 0x00A5}, /* #TVAR_ash_pGAS[445] */ - {0x0F12, 0x008F}, /* #TVAR_ash_pGAS[446] */ - {0x0F12, 0x0082}, /* #TVAR_ash_pGAS[447] */ - {0x0F12, 0x0082}, /* #TVAR_ash_pGAS[448] */ - {0x0F12, 0x0089}, /* #TVAR_ash_pGAS[449] */ - {0x0F12, 0x00A0}, /* #TVAR_ash_pGAS[450] */ - {0x0F12, 0x00C2}, /* #TVAR_ash_pGAS[451] */ - {0x0F12, 0x00F2}, /* #TVAR_ash_pGAS[452] */ - {0x0F12, 0x012C}, /* #TVAR_ash_pGAS[453] */ - {0x0F12, 0x0156}, /* #TVAR_ash_pGAS[454] */ - {0x0F12, 0x0102}, /* #TVAR_ash_pGAS[455] */ - {0x0F12, 0x00CB}, /* #TVAR_ash_pGAS[456] */ - {0x0F12, 0x009B}, /* #TVAR_ash_pGAS[457] */ - {0x0F12, 0x0075}, /* #TVAR_ash_pGAS[458] */ - {0x0F12, 0x005D}, /* #TVAR_ash_pGAS[459] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[460] */ - {0x0F12, 0x004E}, /* #TVAR_ash_pGAS[461] */ - {0x0F12, 0x0059}, /* #TVAR_ash_pGAS[462] */ - {0x0F12, 0x006F}, /* #TVAR_ash_pGAS[463] */ - {0x0F12, 0x0091}, /* #TVAR_ash_pGAS[464] */ - {0x0F12, 0x00BE}, /* #TVAR_ash_pGAS[465] */ - {0x0F12, 0x00FD}, /* #TVAR_ash_pGAS[466] */ - {0x0F12, 0x0134}, /* #TVAR_ash_pGAS[467] */ - {0x0F12, 0x00E1}, /* #TVAR_ash_pGAS[468] */ - {0x0F12, 0x00A5}, /* #TVAR_ash_pGAS[469] */ - {0x0F12, 0x0075}, /* #TVAR_ash_pGAS[470] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[471] */ - {0x0F12, 0x0035}, /* #TVAR_ash_pGAS[472] */ - {0x0F12, 0x0028}, /* #TVAR_ash_pGAS[473] */ - {0x0F12, 0x0025}, /* #TVAR_ash_pGAS[474] */ - {0x0F12, 0x0030}, /* #TVAR_ash_pGAS[475] */ - {0x0F12, 0x0048}, /* #TVAR_ash_pGAS[476] */ - {0x0F12, 0x006C}, /* #TVAR_ash_pGAS[477] */ - {0x0F12, 0x009A}, /* #TVAR_ash_pGAS[478] */ - {0x0F12, 0x00D6}, /* #TVAR_ash_pGAS[479] */ - {0x0F12, 0x0119}, /* #TVAR_ash_pGAS[480] */ - {0x0F12, 0x00CA}, /* #TVAR_ash_pGAS[481] */ - {0x0F12, 0x0090}, /* #TVAR_ash_pGAS[482] */ - {0x0F12, 0x005C}, /* #TVAR_ash_pGAS[483] */ - {0x0F12, 0x0036}, /* #TVAR_ash_pGAS[484] */ - {0x0F12, 0x001B}, /* #TVAR_ash_pGAS[485] */ - {0x0F12, 0x000D}, /* #TVAR_ash_pGAS[486] */ - {0x0F12, 0x000B}, /* #TVAR_ash_pGAS[487] */ - {0x0F12, 0x0015}, /* #TVAR_ash_pGAS[488] */ - {0x0F12, 0x002A}, /* #TVAR_ash_pGAS[489] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[490] */ - {0x0F12, 0x007C}, /* #TVAR_ash_pGAS[491] */ - {0x0F12, 0x00B9}, /* #TVAR_ash_pGAS[492] */ - {0x0F12, 0x00FA}, /* #TVAR_ash_pGAS[493] */ - {0x0F12, 0x00BF}, /* #TVAR_ash_pGAS[494] */ - {0x0F12, 0x0086}, /* #TVAR_ash_pGAS[495] */ - {0x0F12, 0x0053}, /* #TVAR_ash_pGAS[496] */ - {0x0F12, 0x002C}, /* #TVAR_ash_pGAS[497] */ - {0x0F12, 0x0010}, /* #TVAR_ash_pGAS[498] */ - {0x0F12, 0x0002}, /* #TVAR_ash_pGAS[499] */ - {0x0F12, 0x0000}, /* #TVAR_ash_pGAS[500] */ - {0x0F12, 0x0007}, /* #TVAR_ash_pGAS[501] */ - {0x0F12, 0x001D}, /* #TVAR_ash_pGAS[502] */ - {0x0F12, 0x0040}, /* #TVAR_ash_pGAS[503] */ - {0x0F12, 0x006B}, /* #TVAR_ash_pGAS[504] */ - {0x0F12, 0x00A8}, /* #TVAR_ash_pGAS[505] */ - {0x0F12, 0x00EC}, /* #TVAR_ash_pGAS[506] */ - {0x0F12, 0x00C4}, /* #TVAR_ash_pGAS[507] */ - {0x0F12, 0x0089}, /* #TVAR_ash_pGAS[508] */ - {0x0F12, 0x0057}, /* #TVAR_ash_pGAS[509] */ - {0x0F12, 0x002F}, /* #TVAR_ash_pGAS[510] */ - {0x0F12, 0x0015}, /* #TVAR_ash_pGAS[511] */ - {0x0F12, 0x0008}, /* #TVAR_ash_pGAS[512] */ - {0x0F12, 0x0003}, /* #TVAR_ash_pGAS[513] */ - {0x0F12, 0x000B}, /* #TVAR_ash_pGAS[514] */ - {0x0F12, 0x001E}, /* #TVAR_ash_pGAS[515] */ - {0x0F12, 0x003F}, /* #TVAR_ash_pGAS[516] */ - {0x0F12, 0x006B}, /* #TVAR_ash_pGAS[517] */ - {0x0F12, 0x00A6}, /* #TVAR_ash_pGAS[518] */ - {0x0F12, 0x00E5}, /* #TVAR_ash_pGAS[519] */ - {0x0F12, 0x00D2}, /* #TVAR_ash_pGAS[520] */ - {0x0F12, 0x0097}, /* #TVAR_ash_pGAS[521] */ - {0x0F12, 0x0065}, /* #TVAR_ash_pGAS[522] */ - {0x0F12, 0x0041}, /* #TVAR_ash_pGAS[523] */ - {0x0F12, 0x0027}, /* #TVAR_ash_pGAS[524] */ - {0x0F12, 0x0018}, /* #TVAR_ash_pGAS[525] */ - {0x0F12, 0x0014}, /* #TVAR_ash_pGAS[526] */ - {0x0F12, 0x001A}, /* #TVAR_ash_pGAS[527] */ - {0x0F12, 0x002E}, /* #TVAR_ash_pGAS[528] */ - {0x0F12, 0x004F}, /* #TVAR_ash_pGAS[529] */ - {0x0F12, 0x0076}, /* #TVAR_ash_pGAS[530] */ - {0x0F12, 0x00B3}, /* #TVAR_ash_pGAS[531] */ - {0x0F12, 0x00F1}, /* #TVAR_ash_pGAS[532] */ - {0x0F12, 0x00EE}, /* #TVAR_ash_pGAS[533] */ - {0x0F12, 0x00B3}, /* #TVAR_ash_pGAS[534] */ - {0x0F12, 0x0082}, /* #TVAR_ash_pGAS[535] */ - {0x0F12, 0x005D}, /* #TVAR_ash_pGAS[536] */ - {0x0F12, 0x0043}, /* #TVAR_ash_pGAS[537] */ - {0x0F12, 0x0036}, /* #TVAR_ash_pGAS[538] */ - {0x0F12, 0x0031}, /* #TVAR_ash_pGAS[539] */ - {0x0F12, 0x0037}, /* #TVAR_ash_pGAS[540] */ - {0x0F12, 0x004B}, /* #TVAR_ash_pGAS[541] */ - {0x0F12, 0x0067}, /* #TVAR_ash_pGAS[542] */ - {0x0F12, 0x0092}, /* #TVAR_ash_pGAS[543] */ - {0x0F12, 0x00CD}, /* #TVAR_ash_pGAS[544] */ - {0x0F12, 0x0107}, /* #TVAR_ash_pGAS[545] */ - {0x0F12, 0x0110}, /* #TVAR_ash_pGAS[546] */ - {0x0F12, 0x00DA}, /* #TVAR_ash_pGAS[547] */ - {0x0F12, 0x00AA}, /* #TVAR_ash_pGAS[548] */ - {0x0F12, 0x0086}, /* #TVAR_ash_pGAS[549] */ - {0x0F12, 0x006F}, /* #TVAR_ash_pGAS[550] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[551] */ - {0x0F12, 0x005B}, /* #TVAR_ash_pGAS[552] */ - {0x0F12, 0x0061}, /* #TVAR_ash_pGAS[553] */ - {0x0F12, 0x0072}, /* #TVAR_ash_pGAS[554] */ - {0x0F12, 0x008D}, /* #TVAR_ash_pGAS[555] */ - {0x0F12, 0x00B6}, /* #TVAR_ash_pGAS[556] */ - {0x0F12, 0x00F1}, /* #TVAR_ash_pGAS[557] */ - {0x0F12, 0x0129}, /* #TVAR_ash_pGAS[558] */ - {0x0F12, 0x0134}, /* #TVAR_ash_pGAS[559] */ - {0x0F12, 0x0102}, /* #TVAR_ash_pGAS[560] */ - {0x0F12, 0x00D2}, /* #TVAR_ash_pGAS[561] */ - {0x0F12, 0x00B0}, /* #TVAR_ash_pGAS[562] */ - {0x0F12, 0x009A}, /* #TVAR_ash_pGAS[563] */ - {0x0F12, 0x008D}, /* #TVAR_ash_pGAS[564] */ - {0x0F12, 0x0089}, /* #TVAR_ash_pGAS[565] */ - {0x0F12, 0x008C}, /* #TVAR_ash_pGAS[566] */ - {0x0F12, 0x0099}, /* #TVAR_ash_pGAS[567] */ - {0x0F12, 0x00B2}, /* #TVAR_ash_pGAS[568] */ - {0x0F12, 0x00D9}, /* #TVAR_ash_pGAS[569] */ - {0x0F12, 0x010E}, /* #TVAR_ash_pGAS[570] */ - {0x0F12, 0x0142}, /* #TVAR_ash_pGAS[571] */ - - {0x002A, 0x0D30}, - {0x0F12, 0x02A7}, /* #awbb_GLocusR */ - {0x0F12, 0x0343}, /* #awbb_GLocusB */ - {0x002A, 0x06B8}, - {0x0F12, 0x00C7}, /* #TVAR_ash_AwbAshCord_0_ */ - {0x0F12, 0x00d9}, /* #TVAR_ash_AwbAshCord_1_ */ - {0x0F12, 0x0110}, /* #TVAR_ash_AwbAshCord_2_ */ - {0x0F12, 0x0129}, /* #TVAR_ash_AwbAshCord_3_ */ - {0x0F12, 0x0159}, /* #TVAR_ash_AwbAshCord_4_ */ - {0x0F12, 0x0179}, /* #TVAR_ash_AwbAshCord_5_ */ - {0x0F12, 0x018c}, /* #TVAR_ash_AwbAshCord_6_ */ - - /* Set CCM */ - /* CCM start address 7000_33A4 */ - {0x002A, 0x0698}, - {0x0F12, 0x33A4}, - {0x0F12, 0x7000}, - {0x002A, 0x33A4}, - {0x0F12, 0x0172}, /* #TVAR_wbt_pBaseCcms[0] Horizon */ - {0x0F12, 0xFF64}, /* #TVAR_wbt_pBaseCcms[1] */ - {0x0F12, 0xFFA0}, /* #TVAR_wbt_pBaseCcms[2] */ - {0x0F12, 0xFF4D}, /* #TVAR_wbt_pBaseCcms[3] */ - {0x0F12, 0x01FA}, /* #TVAR_wbt_pBaseCcms[4] */ - {0x0F12, 0xFEF4}, /* #TVAR_wbt_pBaseCcms[5] */ - {0x0F12, 0xFFD9}, /* #TVAR_wbt_pBaseCcms[6] */ - {0x0F12, 0x0025}, /* #TVAR_wbt_pBaseCcms[7] */ - {0x0F12, 0x026F}, /* #TVAR_wbt_pBaseCcms[8] */ - {0x0F12, 0x0299}, /* #TVAR_wbt_pBaseCcms[9] */ - {0x0F12, 0x012F}, /* #TVAR_wbt_pBaseCcms[10] */ - {0x0F12, 0xFE21}, /* #TVAR_wbt_pBaseCcms[11] */ - {0x0F12, 0x0143}, /* #TVAR_wbt_pBaseCcms[12] */ - {0x0F12, 0xFF4E}, /* #TVAR_wbt_pBaseCcms[13] */ - {0x0F12, 0x0183}, /* #TVAR_wbt_pBaseCcms[14] */ - {0x0F12, 0xFEBA}, /* #TVAR_wbt_pBaseCcms[15] */ - {0x0F12, 0x0191}, /* #TVAR_wbt_pBaseCcms[16] */ - {0x0F12, 0x013D}, /* #TVAR_wbt_pBaseCcms[17] */ - {0x0F12, 0x0172}, /* #TVAR_wbt_pBaseCcms[18] Inca */ - {0x0F12, 0xFF64}, /* #TVAR_wbt_pBaseCcms[19] */ - {0x0F12, 0xFFA0}, /* #TVAR_wbt_pBaseCcms[20] */ - {0x0F12, 0xFF4D}, /* #TVAR_wbt_pBaseCcms[21] */ - {0x0F12, 0x01FA}, /* #TVAR_wbt_pBaseCcms[22] */ - {0x0F12, 0xFEF4}, /* #TVAR_wbt_pBaseCcms[23] */ - {0x0F12, 0xFFD9}, /* #TVAR_wbt_pBaseCcms[24] */ - {0x0F12, 0x0025}, /* #TVAR_wbt_pBaseCcms[25] */ - {0x0F12, 0x026F}, /* #TVAR_wbt_pBaseCcms[26] */ - {0x0F12, 0x0299}, /* #TVAR_wbt_pBaseCcms[27] */ - {0x0F12, 0x012F}, /* #TVAR_wbt_pBaseCcms[28] */ - {0x0F12, 0xFE21}, /* #TVAR_wbt_pBaseCcms[29] */ - {0x0F12, 0x0143}, /* #TVAR_wbt_pBaseCcms[30] */ - {0x0F12, 0xFF4E}, /* #TVAR_wbt_pBaseCcms[31] */ - {0x0F12, 0x0183}, /* #TVAR_wbt_pBaseCcms[32] */ - {0x0F12, 0xFEBA}, /* #TVAR_wbt_pBaseCcms[33] */ - {0x0F12, 0x0191}, /* #TVAR_wbt_pBaseCcms[34] */ - {0x0F12, 0x013D}, /* #TVAR_wbt_pBaseCcms[35] */ - {0x0F12, 0x01C8}, /* #TVAR_wbt_pBaseCcms[36] WW */ - {0x0F12, 0xFF57}, /* #TVAR_wbt_pBaseCcms[37] */ - {0x0F12, 0xFFC3}, /* #TVAR_wbt_pBaseCcms[38] */ - {0x0F12, 0xFF67}, /* #TVAR_wbt_pBaseCcms[39] */ - {0x0F12, 0x01AD}, /* #TVAR_wbt_pBaseCcms[40] */ - {0x0F12, 0xFF39}, /* #TVAR_wbt_pBaseCcms[41] */ - {0x0F12, 0xFFE6}, /* #TVAR_wbt_pBaseCcms[42] */ - {0x0F12, 0xFFF0}, /* #TVAR_wbt_pBaseCcms[43] */ - {0x0F12, 0x01B0}, /* #TVAR_wbt_pBaseCcms[44] */ - {0x0F12, 0x00EF}, /* #TVAR_wbt_pBaseCcms[45] */ - {0x0F12, 0x00EE}, /* #TVAR_wbt_pBaseCcms[46] */ - {0x0F12, 0xFF1D}, /* #TVAR_wbt_pBaseCcms[47] */ - {0x0F12, 0x01A4}, /* #TVAR_wbt_pBaseCcms[48] */ - {0x0F12, 0xFF70}, /* #TVAR_wbt_pBaseCcms[49] */ - {0x0F12, 0x01D0}, /* #TVAR_wbt_pBaseCcms[50] */ - {0x0F12, 0xFF3B}, /* #TVAR_wbt_pBaseCcms[51] */ - {0x0F12, 0x016F}, /* #TVAR_wbt_pBaseCcms[52] */ - {0x0F12, 0x012C}, /* #TVAR_wbt_pBaseCcms[53] */ - {0x0F12, 0x01C8}, /* #TVAR_wbt_pBaseCcms[54] CWF */ - {0x0F12, 0xFF57}, /* #TVAR_wbt_pBaseCcms[55] */ - {0x0F12, 0xFFC3}, /* #TVAR_wbt_pBaseCcms[56] */ - {0x0F12, 0xFF67}, /* #TVAR_wbt_pBaseCcms[57] */ - {0x0F12, 0x01AD}, /* #TVAR_wbt_pBaseCcms[58] */ - {0x0F12, 0xFF39}, /* #TVAR_wbt_pBaseCcms[59] */ - {0x0F12, 0xFFE6}, /* #TVAR_wbt_pBaseCcms[60] */ - {0x0F12, 0xFFF0}, /* #TVAR_wbt_pBaseCcms[61] */ - {0x0F12, 0x01B0}, /* #TVAR_wbt_pBaseCcms[62] */ - {0x0F12, 0x00EF}, /* #TVAR_wbt_pBaseCcms[63] */ - {0x0F12, 0x00EE}, /* #TVAR_wbt_pBaseCcms[64] */ - {0x0F12, 0xFF1D}, /* #TVAR_wbt_pBaseCcms[65] */ - {0x0F12, 0x01A4}, /* #TVAR_wbt_pBaseCcms[66] */ - {0x0F12, 0xFF70}, /* #TVAR_wbt_pBaseCcms[67] */ - {0x0F12, 0x01D0}, /* #TVAR_wbt_pBaseCcms[68] */ - {0x0F12, 0xFF3B}, /* #TVAR_wbt_pBaseCcms[69] */ - {0x0F12, 0x016F}, /* #TVAR_wbt_pBaseCcms[70] */ - {0x0F12, 0x012C}, /* #TVAR_wbt_pBaseCcms[71] */ - {0x0F12, 0x0184}, /* #TVAR_wbt_pBaseCcms[72] D50 */ - {0x0F12, 0xFFA0}, /* #TVAR_wbt_pBaseCcms[73] */ - {0x0F12, 0xFFF4}, /* #TVAR_wbt_pBaseCcms[74] */ - {0x0F12, 0xFF71}, /* #TVAR_wbt_pBaseCcms[75] */ - {0x0F12, 0x019E}, /* #TVAR_wbt_pBaseCcms[76] */ - {0x0F12, 0xFF45}, /* #TVAR_wbt_pBaseCcms[77] */ - {0x0F12, 0xFFFE}, /* #TVAR_wbt_pBaseCcms[78] */ - {0x0F12, 0x0006}, /* #TVAR_wbt_pBaseCcms[79] */ - {0x0F12, 0x018A}, /* #TVAR_wbt_pBaseCcms[80] */ - {0x0F12, 0x0110}, /* #TVAR_wbt_pBaseCcms[81] */ - {0x0F12, 0x010F}, /* #TVAR_wbt_pBaseCcms[82] */ - {0x0F12, 0xFF52}, /* #TVAR_wbt_pBaseCcms[83] */ - {0x0F12, 0x01D7}, /* #TVAR_wbt_pBaseCcms[84] */ - {0x0F12, 0xFF9D}, /* #TVAR_wbt_pBaseCcms[85] */ - {0x0F12, 0x0203}, /* #TVAR_wbt_pBaseCcms[86] */ - {0x0F12, 0xFF55}, /* #TVAR_wbt_pBaseCcms[87] */ - {0x0F12, 0x0163}, /* #TVAR_wbt_pBaseCcms[88] */ - {0x0F12, 0x0126}, /* #TVAR_wbt_pBaseCcms[89] */ - {0x0F12, 0x0199}, /* #TVAR_wbt_pBaseCcms[90] D65*/ - {0x0F12, 0xFFA5}, /* #TVAR_wbt_pBaseCcms[91] */ - {0x0F12, 0xFFFC}, /* #TVAR_wbt_pBaseCcms[92] */ - {0x0F12, 0xFF6F}, /* #TVAR_wbt_pBaseCcms[93] */ - {0x0F12, 0x019F}, /* #TVAR_wbt_pBaseCcms[94] */ - {0x0F12, 0xFF43}, /* #TVAR_wbt_pBaseCcms[95] */ - {0x0F12, 0xFFFB}, /* #TVAR_wbt_pBaseCcms[96] */ - {0x0F12, 0x0003}, /* #TVAR_wbt_pBaseCcms[97] */ - {0x0F12, 0x018E}, /* #TVAR_wbt_pBaseCcms[98] */ - {0x0F12, 0x010C}, /* #TVAR_wbt_pBaseCcms[99] */ - {0x0F12, 0x010B}, /* #TVAR_wbt_pBaseCcms[100] */ - {0x0F12, 0xFF4B}, /* #TVAR_wbt_pBaseCcms[101] */ - {0x0F12, 0x01F6}, /* #TVAR_wbt_pBaseCcms[102] */ - {0x0F12, 0xFFBC}, /* #TVAR_wbt_pBaseCcms[103] */ - {0x0F12, 0x0222}, /* #TVAR_wbt_pBaseCcms[104] */ - {0x0F12, 0xFF4F}, /* #TVAR_wbt_pBaseCcms[105] */ - {0x0F12, 0x0162}, /* #TVAR_wbt_pBaseCcms[106] */ - {0x0F12, 0x0124}, /* #TVAR_wbt_pBaseCcms[107] */ - {0x002A, 0x06A0}, /* Outdoor CCM address 7000_3380 */ - {0x0F12, 0x3380}, - {0x0F12, 0x7000}, - {0x002A, 0x3380}, /* Outdoor CCM */ - {0x0F12, 0x01E0}, /* #TVAR_wbt_pOutdoorCcm[0] */ - {0x0F12, 0xFF80}, /* #TVAR_wbt_pOutdoorCcm[1] */ - {0x0F12, 0xFFD0}, /* #TVAR_wbt_pOutdoorCcm[2] */ - {0x0F12, 0xFF61}, /* #TVAR_wbt_pOutdoorCcm[3] */ - {0x0F12, 0x01BD}, /* #TVAR_wbt_pOutdoorCcm[4] */ - {0x0F12, 0xFF34}, /* #TVAR_wbt_pOutdoorCcm[5] */ - {0x0F12, 0xFFFE}, /* #TVAR_wbt_pOutdoorCcm[6] */ - {0x0F12, 0xFFF6}, /* #TVAR_wbt_pOutdoorCcm[7] */ - {0x0F12, 0x019D}, /* #TVAR_wbt_pOutdoorCcm[8] */ - {0x0F12, 0x0107}, /* #TVAR_wbt_pOutdoorCcm[9] */ - {0x0F12, 0x010F}, /* #TVAR_wbt_pOutdoorCcm[10] */ - {0x0F12, 0xFF67}, /* #TVAR_wbt_pOutdoorCcm[11] */ - {0x0F12, 0x016C}, /* #TVAR_wbt_pOutdoorCcm[12] */ - {0x0F12, 0xFF54}, /* #TVAR_wbt_pOutdoorCcm[13] */ - {0x0F12, 0x01FC}, /* #TVAR_wbt_pOutdoorCcm[14] */ - {0x0F12, 0xFF82}, /* #TVAR_wbt_pOutdoorCcm[15] */ - {0x0F12, 0x015D}, /* #TVAR_wbt_pOutdoorCcm[16] */ - {0x0F12, 0x00FD}, /* #TVAR_wbt_pOutdoorCcm[17] */ - - /* White balance */ - {0x002A, 0x0C48}, - {0x0F12, 0x03C8}, /* awbb_IndoorGrZones_m_BGrid[0] */ - {0x0F12, 0x03E2}, /* awbb_IndoorGrZones_m_BGrid[1] */ - {0x0F12, 0x038A}, /* awbb_IndoorGrZones_m_BGrid[2] */ - {0x0F12, 0x03F4}, /* awbb_IndoorGrZones_m_BGrid[3] */ - {0x0F12, 0x034E}, /* awbb_IndoorGrZones_m_BGrid[4] */ - {0x0F12, 0x03E2}, /* awbb_IndoorGrZones_m_BGrid[5] */ - {0x0F12, 0x030A}, /* awbb_IndoorGrZones_m_BGrid[6] */ - {0x0F12, 0x03B8}, /* awbb_IndoorGrZones_m_BGrid[7] */ - {0x0F12, 0x02C8}, /* awbb_IndoorGrZones_m_BGrid[8] */ - {0x0F12, 0x038A}, /* awbb_IndoorGrZones_m_BGrid[9] */ - {0x0F12, 0x029C}, /* awbb_IndoorGrZones_m_BGrid[10] */ - {0x0F12, 0x0356}, /* awbb_IndoorGrZones_m_BGrid[11] */ - {0x0F12, 0x0286}, /* awbb_IndoorGrZones_m_BGrid[12] */ - {0x0F12, 0x0322}, /* awbb_IndoorGrZones_m_BGrid[13] */ - {0x0F12, 0x026C}, /* awbb_IndoorGrZones_m_BGrid[14] */ - {0x0F12, 0x02F6}, /* awbb_IndoorGrZones_m_BGrid[15] */ - {0x0F12, 0x0254}, /* awbb_IndoorGrZones_m_BGrid[16] */ - {0x0F12, 0x02CA}, /* awbb_IndoorGrZones_m_BGrid[17] */ - {0x0F12, 0x023E}, /* awbb_IndoorGrZones_m_BGrid[18] */ - {0x0F12, 0x02B8}, /* awbb_IndoorGrZones_m_BGrid[19] */ - {0x0F12, 0x022E}, /* awbb_IndoorGrZones_m_BGrid[20] */ - {0x0F12, 0x02A4}, /* awbb_IndoorGrZones_m_BGrid[21] */ - {0x0F12, 0x0226}, /* awbb_IndoorGrZones_m_BGrid[22] */ - {0x0F12, 0x0294}, /* awbb_IndoorGrZones_m_BGrid[23] */ - {0x0F12, 0x0220}, /* awbb_IndoorGrZones_m_BGrid[24] */ - {0x0F12, 0x027E}, /* awbb_IndoorGrZones_m_BGrid[25] */ - {0x0F12, 0x022A}, /* awbb_IndoorGrZones_m_BGrid[26] */ - {0x0F12, 0x025E}, /* awbb_IndoorGrZones_m_BGrid[27] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[28] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[29] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[30] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[31] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[32] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[33] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[34] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[35] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[36] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[37] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[38] */ - {0x0F12, 0x0000}, /* awbb_IndoorGrZones_m_BGrid[39] */ - {0x0F12, 0x0005}, /* awbb_IndoorGrZones_m_GridStep */ - {0x002A, 0x0C9C}, - {0x0F12, 0x000E}, - {0x002A, 0x0CA0}, /* awbb_IndoorGrZones_m_Boffs */ - {0x0F12, 0x00FE}, - {0x002A, 0x0CA4}, - {0x0F12, 0x027E}, /* awbb_OutdoorGrZones_m_BGrid[0] */ - {0x0F12, 0x02AE}, /* awbb_OutdoorGrZones_m_BGrid[1] */ - {0x0F12, 0x025C}, /* awbb_OutdoorGrZones_m_BGrid[2] */ - {0x0F12, 0x02B2}, /* awbb_OutdoorGrZones_m_BGrid[3] */ - {0x0F12, 0x0244}, /* awbb_OutdoorGrZones_m_BGrid[4] */ - {0x0F12, 0x02A0}, /* awbb_OutdoorGrZones_m_BGrid[5] */ - {0x0F12, 0x0236}, /* awbb_OutdoorGrZones_m_BGrid[6] */ - {0x0F12, 0x0290}, /* awbb_OutdoorGrZones_m_BGrid[7] */ - {0x0F12, 0x0230}, /* awbb_OutdoorGrZones_m_BGrid[8] */ - {0x0F12, 0x027A}, /* awbb_OutdoorGrZones_m_BGrid[9] */ - {0x0F12, 0x0236}, /* awbb_OutdoorGrZones_m_BGrid[10] */ - {0x0F12, 0x025E}, /* awbb_OutdoorGrZones_m_BGrid[11] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[12] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[13] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[14] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[15] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[16] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[17] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[18] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[19] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[20] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[21] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[22] */ - {0x0F12, 0x0000}, /* awbb_OutdoorGrZones_m_BGrid[23] */ - {0x0F12, 0x0005}, - {0x002A, 0x0CD8}, /* awbb_OutdoorGrZones_m_GridStep */ - {0x0F12, 0x0006}, - {0x002A, 0x0CDC}, /* awbb_OutdoorGrZones_m_Boffs */ - {0x0F12, 0x01EE}, - - {0x002A, 0x0D88}, - {0x0F12, 0xFFAD}, /* awbb_OutdoorDetectionZone_m_BGrid[0] */ - {0x0F12, 0x005D}, /* awbb_OutdoorDetectionZone_m_BGrid[1] */ - {0x0F12, 0xFF6B}, /* awbb_OutdoorDetectionZone_m_BGrid[2] */ - {0x0F12, 0x00A0}, /* awbb_OutdoorDetectionZone_m_BGrid[3] */ - {0x0F12, 0xFEFE}, /* awbb_OutdoorDetectionZone_m_BGrid[4] */ - {0x0F12, 0x010D}, /* awbb_OutdoorDetectionZone_m_BGrid[5] */ - {0x0F12, 0xFE99}, /* awbb_OutdoorDetectionZone_m_BGrid[6] */ - {0x0F12, 0x0172}, /* awbb_OutdoorDetectionZone_m_BGrid[7] */ - {0x0F12, 0xFE6A}, /* awbb_OutdoorDetectionZone_m_BGrid[8] */ - {0x0F12, 0x01A8}, /* awbb_OutdoorDetectionZone_m_BGrid[9] */ - {0x0F12, 0x1388}, /* awbb_OutdoorDetectionZone_ZInfo_m_AbsGridStep */ - {0x0F12, 0x0000}, /* awbb_OutdoorDetectionZone_ZInfo_m_MaxNB */ - {0x0F12, 0x0005}, /* awbb_OutdoorDetectionZone_ZInfo_m_NBoffs */ - {0x0F12, 0x0000}, - {0x0F12, 0x1387}, - {0x0F12, 0x0000}, - {0x0F12, 0x1388}, - {0x0F12, 0x0000}, - - {0x002A, 0x0DA8}, - {0x0F12, 0x0913}, - {0x002A, 0x0DA4}, - {0x0F12, 0x0008}, - - {0x002A, 0x0CE0}, - {0x0F12, 0x03EA}, /* awbb_LowBrGrZones_m_BGrid[0] */ - {0x0F12, 0x044E}, /* awbb_LowBrGrZones_m_BGrid[1] */ - {0x0F12, 0x035E}, /* awbb_LowBrGrZones_m_BGrid[2] */ - {0x0F12, 0x044C}, /* awbb_LowBrGrZones_m_BGrid[3] */ - {0x0F12, 0x02FA}, /* awbb_LowBrGrZones_m_BGrid[4] */ - {0x0F12, 0x0434}, /* awbb_LowBrGrZones_m_BGrid[5] */ - {0x0F12, 0x02AA}, /* awbb_LowBrGrZones_m_BGrid[6] */ - {0x0F12, 0x03F2}, /* awbb_LowBrGrZones_m_BGrid[7] */ - {0x0F12, 0x0266}, /* awbb_LowBrGrZones_m_BGrid[8] */ - {0x0F12, 0x03AE}, /* awbb_LowBrGrZones_m_BGrid[9] */ - {0x0F12, 0x022C}, /* awbb_L0CA4owBrGrZones_m_BGrid[10] */ - {0x0F12, 0x035A}, /* awbb_LowBrGrZones_m_BGrid[11] */ - {0x0F12, 0x020E}, /* awbb_LowBrGrZones_m_BGrid[12] */ - {0x0F12, 0x0314}, /* awbb_LowBrGrZones_m_BGrid[13] */ - {0x0F12, 0x01F4}, /* awbb_LowBrGrZones_m_BGrid[14] */ - {0x0F12, 0x02E0}, /* awbb_LowBrGrZones_m_BGrid[15] */ - {0x0F12, 0x01E2}, /* awbb_LowBrGrZones_m_BGrid[16] */ - {0x0F12, 0x02AA}, /* awbb_LowBrGrZones_m_BGrid[17] */ - {0x0F12, 0x01E6}, /* awbb_LowBrGrZones_m_BGrid[18] */ - {0x0F12, 0x0264}, /* awbb_LowBrGrZones_m_BGrid[19] */ - {0x0F12, 0x0000}, /* awbb_LowBrGrZones_m_BGrid[20] */ - {0x0F12, 0x0000}, /* awbb_LowBrGrZones_m_BGrid[21] */ - {0x0F12, 0x0000}, /* awbb_LowBrGrZones_m_BGrid[22] */ - {0x0F12, 0x0000}, /* awbb_LowBrGrZones_m_BGrid[23] */ - {0x0F12, 0x0006}, /* awbb_LowBrGrZones_m_GridStep */ - {0x002A, 0x0D14}, - {0x0F12, 0x000A}, - {0x002A, 0x0D18}, /* awbb_LowBrGrZones_m_Boffs */ - {0x0F12, 0x009A}, - {0x002A, 0x0D1C}, - {0x0F12, 0x036C}, /* awbb_CrclLowT_R_c */ - {0x002A, 0x0D20}, - {0x0F12, 0x011C}, /* awbb_CrclLowT_B_c */ - {0x002A, 0x0D24}, - {0x0F12, 0x6184}, /* awbb_CrclLowT_Rad_c */ - {0x002A, 0x0D2C}, - {0x0F12, 0x0135}, /* awbb_IntcR */ - {0x0F12, 0x012B}, /* awbb_IntcB */ - {0x002A, 0x0D28}, - {0x0F12, 0x024E}, - {0x0F12, 0x027B}, - {0x002A, 0x0E4C}, - {0x0F12, 0x0000}, - {0x002A, 0x0D4C}, - {0x0F12, 0x0653}, - {0x0F12, 0x02EB}, - {0x0F12, 0x002C}, - {0x0F12, 0x000B}, - {0x002A, 0x0D5C}, /* awbb_LowTempRB */ - {0x0F12, 0x7FFF}, - {0x0F12, 0x0050}, - {0x002A, 0x0D46}, - {0x0F12, 0x053A}, /* awbb_MvEq_RBthresh */ - {0x002A, 0x0D4A}, - {0x0F12, 0x000A}, - {0x002A, 0x0DD4}, - {0x0F12, 0xFFFE}, - {0x0F12, 0xFFEC}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0xFFFD}, - {0x0F12, 0xFFEC}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0xFFFC}, - {0x0F12, 0xFFEC}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - {0x0F12, 0x0000}, - {0x0F12, 0x0028}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0028}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0028}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - {0x0F12, 0x02F0}, - {0x0F12, 0x0358}, - {0x0F12, 0x03A5}, - {0x0F12, 0x0F9C}, - {0x0F12, 0x0FFA}, - {0x0F12, 0x10B5}, - {0x0F12, 0x1126}, - {0x0F12, 0x1176}, - {0x0F12, 0x1220}, - {0x0F12, 0x00B2}, - {0x0F12, 0x00B8}, - {0x0F12, 0x00B7}, - {0x0F12, 0x00B3}, - {0x002A, 0x0E3E}, - {0x0F12, 0x0000}, - {0x002A, 0x22DE}, - {0x0F12, 0x0004}, - {0x002A, 0x337C}, - {0x0F12, 0x00B3}, - {0x0F12, 0x0040}, - {0x002A, 0x0E44}, - {0x0F12, 0x053C}, - {0x0F12, 0x0400}, - {0x0F12, 0x055C}, - {0x002A, 0x0E36}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - {0x002A, 0x0E4A}, /* Grid offset enable */ - {0x0F12, 0x0001}, - - /* Set GAMMA */ - {0x002A, 0x3288}, - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBIndoor_0__0_ 0x70003288 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBIndoor_0__1_ 0x7000328A */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBIndoor_0__2_ 0x7000328C */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBIndoor_0__3_ 0x7000328E */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBIndoor_0__4_ 0x70003290 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBIndoor_0__5_ 0x70003292 */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBIndoor_0__6_ 0x70003294 */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBIndoor_0__7_ 0x70003296 */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBIndoor_0__8_ 0x70003298 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBIndoor_0__9_ 0x7000329A */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBIndoor_0__10_ 0x7000329C */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBIndoor_0__11_ 0x7000329E */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBIndoor_0__12_ 0x700032A0 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBIndoor_0__13_ 0x700032A2 */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBIndoor_0__14_ 0x700032A4 */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBIndoor_0__15_ 0x700032A6 */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBIndoor_0__16_ 0x700032A8 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBIndoor_0__17_ 0x700032AA */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBIndoor_0__18_ 0x700032AC */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBIndoor_0__19_ 0x700032AE */ - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBIndoor_1__0_ 0x700032B0 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBIndoor_1__1_ 0x700032B2 */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBIndoor_1__2_ 0x700032B4 */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBIndoor_1__3_ 0x700032B6 */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBIndoor_1__4_ 0x700032B8 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBIndoor_1__5_ 0x700032BA */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBIndoor_1__6_ 0x700032BC */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBIndoor_1__7_ 0x700032BE */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBIndoor_1__8_ 0x700032C0 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBIndoor_1__9_ 0x700032C2 */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBIndoor_1__10_ 0x700032C4 */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBIndoor_1__11_ 0x700032C6 */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBIndoor_1__12_ 0x700032C8 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBIndoor_1__13_ 0x700032CA */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBIndoor_1__14_ 0x700032CC */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBIndoor_1__15_ 0x700032CE */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBIndoor_1__16_ 0x700032D0 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBIndoor_1__17_ 0x700032D2 */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBIndoor_1__18_ 0x700032D4 */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBIndoor_1__19_ 0x700032D6 */ - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBIndoor_2__0_ 0x700032D8 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBIndoor_2__1_ 0x700032DA */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBIndoor_2__2_ 0x700032DC */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBIndoor_2__3_ 0x700032DE */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBIndoor_2__4_ 0x700032E0 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBIndoor_2__5_ 0x700032E2 */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBIndoor_2__6_ 0x700032E4 */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBIndoor_2__7_ 0x700032E6 */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBIndoor_2__8_ 0x700032E8 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBIndoor_2__9_ 0x700032EA */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBIndoor_2__10_ 0x700032EC */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBIndoor_2__11_ 0x700032EE */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBIndoor_2__12_ 0x700032F0 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBIndoor_2__13_ 0x700032F2 */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBIndoor_2__14_ 0x700032F4 */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBIndoor_2__15_ 0x700032F6 */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBIndoor_2__16_ 0x700032F8 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBIndoor_2__17_ 0x700032FA */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBIndoor_2__18_ 0x700032FC */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBIndoor_2__19_ 0x700032FE */ - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBOutdoor_0__0_ 0x70003300 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBOutdoor_0__1_ 0x70003302 */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBOutdoor_0__2_ 0x70003304 */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBOutdoor_0__3_ 0x70003306 */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBOutdoor_0__4_ 0x70003308 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBOutdoor_0__5_ 0x7000330A */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBOutdoor_0__6_ 0x7000330C */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBOutdoor_0__7_ 0x7000330E */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBOutdoor_0__8_ 0x70003310 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBOutdoor_0__9_ 0x70003312 */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBOutdoor_0__10_0x70003314 */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBOutdoor_0__11_0x70003316 */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBOutdoor_0__12_0x70003318 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBOutdoor_0__13_0x7000331A */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBOutdoor_0__14_0x7000331C */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBOutdoor_0__15_0x7000331E */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBOutdoor_0__16_0x70003320 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBOutdoor_0__17_0x70003322 */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBOutdoor_0__18_0x70003324 */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBOutdoor_0__19_0x70003326 */ - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBOutdoor_1__0_ 0x70003328 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBOutdoor_1__1_ 0x7000332A */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBOutdoor_1__2_ 0x7000332C */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBOutdoor_1__3_ 0x7000332E */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBOutdoor_1__4_ 0x70003330 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBOutdoor_1__5_ 0x70003332 */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBOutdoor_1__6_ 0x70003334 */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBOutdoor_1__7_ 0x70003336 */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBOutdoor_1__8_ 0x70003338 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBOutdoor_1__9_ 0x7000333A */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBOutdoor_1__10_0x7000333C */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBOutdoor_1__11_0x7000333E */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBOutdoor_1__12_0x70003340 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBOutdoor_1__13_0x70003342 */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBOutdoor_1__14_0x70003344 */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBOutdoor_1__15_0x70003346 */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBOutdoor_1__16_0x70003348 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBOutdoor_1__17_0x7000334A */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBOutdoor_1__18_0x7000334C */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBOutdoor_1__19_0x7000334E */ - {0x0F12, 0x0000}, /* #SARR_usDualGammaLutRGBOutdoor_2__0_ 0x70003350 */ - {0x0F12, 0x0004}, /* #SARR_usDualGammaLutRGBOutdoor_2__1_ 0x70003352 */ - {0x0F12, 0x0010}, /* #SARR_usDualGammaLutRGBOutdoor_2__2_ 0x70003354 */ - {0x0F12, 0x002A}, /* #SARR_usDualGammaLutRGBOutdoor_2__3_ 0x70003356 */ - {0x0F12, 0x0062}, /* #SARR_usDualGammaLutRGBOutdoor_2__4_ 0x70003358 */ - {0x0F12, 0x00D5}, /* #SARR_usDualGammaLutRGBOutdoor_2__5_ 0x7000335A */ - {0x0F12, 0x0138}, /* #SARR_usDualGammaLutRGBOutdoor_2__6_ 0x7000335C */ - {0x0F12, 0x0161}, /* #SARR_usDualGammaLutRGBOutdoor_2__7_ 0x7000335E */ - {0x0F12, 0x0186}, /* #SARR_usDualGammaLutRGBOutdoor_2__8_ 0x70003360 */ - {0x0F12, 0x01BC}, /* #SARR_usDualGammaLutRGBOutdoor_2__9_ 0x70003362 */ - {0x0F12, 0x01E8}, /* #SARR_usDualGammaLutRGBOutdoor_2__10_0x70003364 */ - {0x0F12, 0x020F}, /* #SARR_usDualGammaLutRGBOutdoor_2__11_0x70003366 */ - {0x0F12, 0x0232}, /* #SARR_usDualGammaLutRGBOutdoor_2__12_0x70003368 */ - {0x0F12, 0x0273}, /* #SARR_usDualGammaLutRGBOutdoor_2__13_0x7000336A */ - {0x0F12, 0x02AF}, /* #SARR_usDualGammaLutRGBOutdoor_2__14_0x7000336C */ - {0x0F12, 0x0309}, /* #SARR_usDualGammaLutRGBOutdoor_2__15_0x7000336E */ - {0x0F12, 0x0355}, /* #SARR_usDualGammaLutRGBOutdoor_2__16_0x70003370 */ - {0x0F12, 0x0394}, /* #SARR_usDualGammaLutRGBOutdoor_2__17_0x70003372 */ - {0x0F12, 0x03CE}, /* #SARR_usDualGammaLutRGBOutdoor_2__18_0x70003374 */ - {0x0F12, 0x03FF}, /* #SARR_usDualGammaLutRGBOutdoor_2__19_0x70003376 */ - - {0x002A, 0x06A6}, - {0x0F12, 0x00CA}, /* #SARR_AwbCcmCord_0_ */ - {0x0F12, 0x00EA}, /* #SARR_AwbCcmCord_1_ */ - {0x0F12, 0x0110}, /* #SARR_AwbCcmCord_2_ */ - {0x0F12, 0x0124}, /* #SARR_AwbCcmCord_3_ */ - {0x0F12, 0x0160}, /* #SARR_AwbCcmCord_4_ */ - {0x0F12, 0x0180}, /* #SARR_AwbCcmCord_5_ */ - - /* Set AFIT */ - /* Noise index */ - {0x002A, 0x0764}, - {0x0F12, 0x0041}, /* #afit_uNoiseIndInDoor[0] */ - {0x0F12, 0x0063}, /* #afit_uNoiseIndInDoor[1] */ - {0x0F12, 0x00BB}, /* #afit_uNoiseIndInDoor[2] */ - {0x0F12, 0x0193}, /* #afit_uNoiseIndInDoor[3] */ - {0x0F12, 0x02BC}, /* #afit_uNoiseIndInDoor[4] */ - - /* AFIT table start address 7000_07C4 */ - {0x002A, 0x0770}, - {0x0F12, 0x07C4}, - {0x0F12, 0x7000}, - - /* AFIT table (Variables) */ - {0x002A, 0x07C4}, - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[0] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[1] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[2] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[3] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[4] */ - {0x0F12, 0x00C4}, /* #TVAR_afit_pBaseVals[5] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[6] */ - {0x0F12, 0x009C}, /* #TVAR_afit_pBaseVals[7] */ - {0x0F12, 0x017C}, /* #TVAR_afit_pBaseVals[8] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[9] */ - {0x0F12, 0x000C}, /* #TVAR_afit_pBaseVals[10] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[11] */ - {0x0F12, 0x0104}, /* #TVAR_afit_pBaseVals[12] */ - {0x0F12, 0x03E8}, /* #TVAR_afit_pBaseVals[13] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[14] */ - {0x0F12, 0x012C}, /* #TVAR_afit_pBaseVals[15] */ - {0x0F12, 0x0070}, /* #TVAR_afit_pBaseVals[16] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[17] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[18] */ - {0x0F12, 0x01AA}, /* #TVAR_afit_pBaseVals[19] */ - {0x0F12, 0x0064}, /* #TVAR_afit_pBaseVals[20] */ - {0x0F12, 0x0064}, /* #TVAR_afit_pBaseVals[21] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[22] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[23] */ - {0x0F12, 0x003C}, /* #TVAR_afit_pBaseVals[24] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[25] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[26] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[27] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[28] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[29] */ - {0x0F12, 0x0A24}, /* #TVAR_afit_pBaseVals[30] */ - {0x0F12, 0x1701}, /* #TVAR_afit_pBaseVals[31] */ - {0x0F12, 0x0229}, /* #TVAR_afit_pBaseVals[32] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[33] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[34] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[35] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[36] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[37] */ - {0x0F12, 0x043B}, /* #TVAR_afit_pBaseVals[38] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[39] */ - {0x0F12, 0x0301}, /* #TVAR_afit_pBaseVals[40] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[41] */ - {0x0F12, 0x051E}, /* #TVAR_afit_pBaseVals[42] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[43] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[44] */ - {0x0F12, 0x0A05}, /* #TVAR_afit_pBaseVals[45] */ - {0x0F12, 0x0A3C}, /* #TVAR_afit_pBaseVals[46] */ - {0x0F12, 0x0A28}, /* #TVAR_afit_pBaseVals[47] */ - {0x0F12, 0x0002}, /* #TVAR_afit_pBaseVals[48] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[49] */ - {0x0F12, 0x1002}, /* #TVAR_afit_pBaseVals[50] */ - {0x0F12, 0x001D}, /* #TVAR_afit_pBaseVals[51] */ - {0x0F12, 0x0900}, /* #TVAR_afit_pBaseVals[52] */ - {0x0F12, 0x0600}, /* #TVAR_afit_pBaseVals[53] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[54] */ - {0x0F12, 0x0305}, /* #TVAR_afit_pBaseVals[55] */ - {0x0F12, 0x5003}, /* #TVAR_afit_pBaseVals[56] */ - {0x0F12, 0x006E}, /* #TVAR_afit_pBaseVals[57] */ - {0x0F12, 0x0078}, /* #TVAR_afit_pBaseVals[58] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[59] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[60] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[61] */ - {0x0F12, 0x5002}, /* #TVAR_afit_pBaseVals[62] */ - {0x0F12, 0x7850}, /* #TVAR_afit_pBaseVals[63] */ - {0x0F12, 0x2878}, /* #TVAR_afit_pBaseVals[64] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[65] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[66] */ - {0x0F12, 0x1E0C}, /* #TVAR_afit_pBaseVals[67] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[68] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[69] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[70] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[71] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[72] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[73] */ - {0x0F12, 0x1E03}, /* #TVAR_afit_pBaseVals[74] */ - {0x0F12, 0x011E}, /* #TVAR_afit_pBaseVals[75] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[76] */ - {0x0F12, 0x5050}, /* #TVAR_afit_pBaseVals[77] */ - {0x0F12, 0x7878}, /* #TVAR_afit_pBaseVals[78] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[79] */ - {0x0F12, 0x030A}, /* #TVAR_afit_pBaseVals[80] */ - {0x0F12, 0x0714}, /* #TVAR_afit_pBaseVals[81] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[82] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[83] */ - {0x0F12, 0x0432}, /* #TVAR_afit_pBaseVals[84] */ - {0x0F12, 0x4050}, /* #TVAR_afit_pBaseVals[85] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[86] */ - {0x0F12, 0x0440}, /* #TVAR_afit_pBaseVals[87] */ - {0x0F12, 0x0302}, /* #TVAR_afit_pBaseVals[88] */ - {0x0F12, 0x1E1E}, /* #TVAR_afit_pBaseVals[89] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[90] */ - {0x0F12, 0x5001}, /* #TVAR_afit_pBaseVals[91] */ - {0x0F12, 0x7850}, /* #TVAR_afit_pBaseVals[92] */ - {0x0F12, 0x2878}, /* #TVAR_afit_pBaseVals[93] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[94] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[95] */ - {0x0F12, 0x1E07}, /* #TVAR_afit_pBaseVals[96] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[97] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[98] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[99] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[100] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[101] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[102] */ - {0x0F12, 0x0003}, /* #TVAR_afit_pBaseVals[103] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[104] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[105] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[106] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[107] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[108] */ - {0x0F12, 0x00C4}, /* #TVAR_afit_pBaseVals[109] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[110] */ - {0x0F12, 0x009C}, /* #TVAR_afit_pBaseVals[111] */ - {0x0F12, 0x017C}, /* #TVAR_afit_pBaseVals[112] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[113] */ - {0x0F12, 0x000C}, /* #TVAR_afit_pBaseVals[114] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[115] */ - {0x0F12, 0x0104}, /* #TVAR_afit_pBaseVals[116] */ - {0x0F12, 0x03E8}, /* #TVAR_afit_pBaseVals[117] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[118] */ - {0x0F12, 0x012C}, /* #TVAR_afit_pBaseVals[119] */ - {0x0F12, 0x0070}, /* #TVAR_afit_pBaseVals[120] */ - {0x0F12, 0x0008}, /* #TVAR_afit_pBaseVals[121] */ - {0x0F12, 0x0008}, /* #TVAR_afit_pBaseVals[122] */ - {0x0F12, 0x01AA}, /* #TVAR_afit_pBaseVals[123] */ - {0x0F12, 0x003C}, /* #TVAR_afit_pBaseVals[124] */ - {0x0F12, 0x003C}, /* #TVAR_afit_pBaseVals[125] */ - {0x0F12, 0x0005}, /* #TVAR_afit_pBaseVals[126] */ - {0x0F12, 0x0005}, /* #TVAR_afit_pBaseVals[127] */ - {0x0F12, 0x0050}, /* #TVAR_afit_pBaseVals[128] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[129] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[130] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[131] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[132] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[133] */ - {0x0F12, 0x0A24}, /* #TVAR_afit_pBaseVals[134] */ - {0x0F12, 0x1701}, /* #TVAR_afit_pBaseVals[135] */ - {0x0F12, 0x0229}, /* #TVAR_afit_pBaseVals[136] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[137] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[138] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[139] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[140] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[141] */ - {0x0F12, 0x043B}, /* #TVAR_afit_pBaseVals[142] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[143] */ - {0x0F12, 0x0301}, /* #TVAR_afit_pBaseVals[144] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[145] */ - {0x0F12, 0x051E}, /* #TVAR_afit_pBaseVals[146] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[147] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[148] */ - {0x0F12, 0x0A03}, /* #TVAR_afit_pBaseVals[149] */ - {0x0F12, 0x0A3C}, /* #TVAR_afit_pBaseVals[150] */ - {0x0F12, 0x0A28}, /* #TVAR_afit_pBaseVals[151] */ - {0x0F12, 0x0002}, /* #TVAR_afit_pBaseVals[152] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[153] */ - {0x0F12, 0x1102}, /* #TVAR_afit_pBaseVals[154] */ - {0x0F12, 0x001D}, /* #TVAR_afit_pBaseVals[155] */ - {0x0F12, 0x0900}, /* #TVAR_afit_pBaseVals[156] */ - {0x0F12, 0x0600}, /* #TVAR_afit_pBaseVals[157] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[158] */ - {0x0F12, 0x0305}, /* #TVAR_afit_pBaseVals[159] */ - {0x0F12, 0x6403}, /* #TVAR_afit_pBaseVals[160] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[161] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[162] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[163] */ - {0x0F12, 0x1919}, /* #TVAR_afit_pBaseVals[164] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[165] */ - {0x0F12, 0x3C02}, /* #TVAR_afit_pBaseVals[166] */ - {0x0F12, 0x553C}, /* #TVAR_afit_pBaseVals[167] */ - {0x0F12, 0x2855}, /* #TVAR_afit_pBaseVals[168] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[169] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[170] */ - {0x0F12, 0x1E0C}, /* #TVAR_afit_pBaseVals[171] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[172] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[173] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[174] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[175] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[176] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[177] */ - {0x0F12, 0x1E03}, /* #TVAR_afit_pBaseVals[178] */ - {0x0F12, 0x011E}, /* #TVAR_afit_pBaseVals[179] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[180] */ - {0x0F12, 0x3232}, /* #TVAR_afit_pBaseVals[181] */ - {0x0F12, 0x3C3C}, /* #TVAR_afit_pBaseVals[182] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[183] */ - {0x0F12, 0x030A}, /* #TVAR_afit_pBaseVals[184] */ - {0x0F12, 0x0714}, /* #TVAR_afit_pBaseVals[185] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[186] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[187] */ - {0x0F12, 0x0432}, /* #TVAR_afit_pBaseVals[188] */ - {0x0F12, 0x4050}, /* #TVAR_afit_pBaseVals[189] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[190] */ - {0x0F12, 0x0440}, /* #TVAR_afit_pBaseVals[191] */ - {0x0F12, 0x0302}, /* #TVAR_afit_pBaseVals[192] */ - {0x0F12, 0x1E1E}, /* #TVAR_afit_pBaseVals[193] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[194] */ - {0x0F12, 0x3201}, /* #TVAR_afit_pBaseVals[195] */ - {0x0F12, 0x3C32}, /* #TVAR_afit_pBaseVals[196] */ - {0x0F12, 0x283C}, /* #TVAR_afit_pBaseVals[197] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[198] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[199] */ - {0x0F12, 0x1E07}, /* #TVAR_afit_pBaseVals[200] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[201] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[202] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[203] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[204] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[205] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[206] */ - {0x0F12, 0x0003}, /* #TVAR_afit_pBaseVals[207] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[208] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[209] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[210] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[211] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[212] */ - {0x0F12, 0x00C4}, /* #TVAR_afit_pBaseVals[213] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[214] */ - {0x0F12, 0x009C}, /* #TVAR_afit_pBaseVals[215] */ - {0x0F12, 0x017C}, /* #TVAR_afit_pBaseVals[216] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[217] */ - {0x0F12, 0x000C}, /* #TVAR_afit_pBaseVals[218] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[219] */ - {0x0F12, 0x0104}, /* #TVAR_afit_pBaseVals[220] */ - {0x0F12, 0x03E8}, /* #TVAR_afit_pBaseVals[221] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[222] */ - {0x0F12, 0x012C}, /* #TVAR_afit_pBaseVals[223] */ - {0x0F12, 0x0070}, /* #TVAR_afit_pBaseVals[224] */ - {0x0F12, 0x0004}, /* #TVAR_afit_pBaseVals[225] */ - {0x0F12, 0x0004}, /* #TVAR_afit_pBaseVals[226] */ - {0x0F12, 0x01AA}, /* #TVAR_afit_pBaseVals[227] */ - {0x0F12, 0x001E}, /* #TVAR_afit_pBaseVals[228] */ - {0x0F12, 0x001E}, /* #TVAR_afit_pBaseVals[229] */ - {0x0F12, 0x0005}, /* #TVAR_afit_pBaseVals[230] */ - {0x0F12, 0x0005}, /* #TVAR_afit_pBaseVals[231] */ - {0x0F12, 0x0064}, /* #TVAR_afit_pBaseVals[232] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[233] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[234] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[235] */ - {0x0F12, 0x002A}, /* #TVAR_afit_pBaseVals[236] */ - {0x0F12, 0x0024}, /* #TVAR_afit_pBaseVals[237] */ - {0x0F12, 0x0A24}, /* #TVAR_afit_pBaseVals[238] */ - {0x0F12, 0x1701}, /* #TVAR_afit_pBaseVals[239] */ - {0x0F12, 0x0229}, /* #TVAR_afit_pBaseVals[240] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[241] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[242] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[243] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[244] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[245] */ - {0x0F12, 0x043B}, /* #TVAR_afit_pBaseVals[246] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[247] */ - {0x0F12, 0x0301}, /* #TVAR_afit_pBaseVals[248] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[249] */ - {0x0F12, 0x051E}, /* #TVAR_afit_pBaseVals[250] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[251] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[252] */ - {0x0F12, 0x0A04}, /* #TVAR_afit_pBaseVals[253] */ - {0x0F12, 0x0A3C}, /* #TVAR_afit_pBaseVals[254] */ - {0x0F12, 0x0528}, /* #TVAR_afit_pBaseVals[255] */ - {0x0F12, 0x0002}, /* #TVAR_afit_pBaseVals[256] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[257] */ - {0x0F12, 0x1002}, /* #TVAR_afit_pBaseVals[258] */ - {0x0F12, 0x001D}, /* #TVAR_afit_pBaseVals[259] */ - {0x0F12, 0x0900}, /* #TVAR_afit_pBaseVals[260] */ - {0x0F12, 0x0600}, /* #TVAR_afit_pBaseVals[261] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[262] */ - {0x0F12, 0x0305}, /* #TVAR_afit_pBaseVals[263] */ - {0x0F12, 0x7803}, /* #TVAR_afit_pBaseVals[264] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[265] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[266] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[267] */ - {0x0F12, 0x2323}, /* #TVAR_afit_pBaseVals[268] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[269] */ - {0x0F12, 0x2A02}, /* #TVAR_afit_pBaseVals[270] */ - {0x0F12, 0x462A}, /* #TVAR_afit_pBaseVals[271] */ - {0x0F12, 0x2846}, /* #TVAR_afit_pBaseVals[272] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[273] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[274] */ - {0x0F12, 0x1E0C}, /* #TVAR_afit_pBaseVals[275] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[276] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[277] */ - {0x0F12, 0x5A04}, /* #TVAR_afit_pBaseVals[278] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[279] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[280] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[281] */ - {0x0F12, 0x2303}, /* #TVAR_afit_pBaseVals[282] */ - {0x0F12, 0x0123}, /* #TVAR_afit_pBaseVals[283] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[284] */ - {0x0F12, 0x262A}, /* #TVAR_afit_pBaseVals[285] */ - {0x0F12, 0x2C2C}, /* #TVAR_afit_pBaseVals[286] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[287] */ - {0x0F12, 0x030A}, /* #TVAR_afit_pBaseVals[288] */ - {0x0F12, 0x0714}, /* #TVAR_afit_pBaseVals[289] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[290] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[291] */ - {0x0F12, 0x0432}, /* #TVAR_afit_pBaseVals[292] */ - {0x0F12, 0x4050}, /* #TVAR_afit_pBaseVals[293] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[294] */ - {0x0F12, 0x0440}, /* #TVAR_afit_pBaseVals[295] */ - {0x0F12, 0x0302}, /* #TVAR_afit_pBaseVals[296] */ - {0x0F12, 0x2323}, /* #TVAR_afit_pBaseVals[297] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[298] */ - {0x0F12, 0x2A01}, /* #TVAR_afit_pBaseVals[299] */ - {0x0F12, 0x2C26}, /* #TVAR_afit_pBaseVals[300] */ - {0x0F12, 0x282C}, /* #TVAR_afit_pBaseVals[301] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[302] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[303] */ - {0x0F12, 0x1E07}, /* #TVAR_afit_pBaseVals[304] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[305] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[306] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[307] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[308] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[309] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[310] */ - {0x0F12, 0x0003}, /* #TVAR_afit_pBaseVals[311] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[312] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[313] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[314] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[315] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[316] */ - {0x0F12, 0x00C4}, /* #TVAR_afit_pBaseVals[317] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[318] */ - {0x0F12, 0x009C}, /* #TVAR_afit_pBaseVals[319] */ - {0x0F12, 0x017C}, /* #TVAR_afit_pBaseVals[320] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[321] */ - {0x0F12, 0x000C}, /* #TVAR_afit_pBaseVals[322] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[323] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[324] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[325] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[326] */ - {0x0F12, 0x012C}, /* #TVAR_afit_pBaseVals[327] */ - {0x0F12, 0x0070}, /* #TVAR_afit_pBaseVals[328] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[329] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[330] */ - {0x0F12, 0x01AA}, /* #TVAR_afit_pBaseVals[331] */ - {0x0F12, 0x001E}, /* #TVAR_afit_pBaseVals[332] */ - {0x0F12, 0x001E}, /* #TVAR_afit_pBaseVals[333] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[334] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[335] */ - {0x0F12, 0x00E6}, /* #TVAR_afit_pBaseVals[336] */ - {0x0F12, 0x0032}, /* #TVAR_afit_pBaseVals[337] */ - {0x0F12, 0x0032}, /* #TVAR_afit_pBaseVals[338] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[339] */ - {0x0F12, 0x0032}, /* #TVAR_afit_pBaseVals[340] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[341] */ - {0x0F12, 0x0A24}, /* #TVAR_afit_pBaseVals[342] */ - {0x0F12, 0x1701}, /* #TVAR_afit_pBaseVals[343] */ - {0x0F12, 0x0229}, /* #TVAR_afit_pBaseVals[344] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[345] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[346] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[347] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[348] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[349] */ - {0x0F12, 0x043B}, /* #TVAR_afit_pBaseVals[350] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[351] */ - {0x0F12, 0x0301}, /* #TVAR_afit_pBaseVals[352] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[353] */ - {0x0F12, 0x051E}, /* #TVAR_afit_pBaseVals[354] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[355] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[356] */ - {0x0F12, 0x0A04}, /* #TVAR_afit_pBaseVals[357] */ - {0x0F12, 0x0A3C}, /* #TVAR_afit_pBaseVals[358] */ - {0x0F12, 0x0532}, /* #TVAR_afit_pBaseVals[359] */ - {0x0F12, 0x0002}, /* #TVAR_afit_pBaseVals[360] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[361] */ - {0x0F12, 0x1002}, /* #TVAR_afit_pBaseVals[362] */ - {0x0F12, 0x001D}, /* #TVAR_afit_pBaseVals[363] */ - {0x0F12, 0x0900}, /* #TVAR_afit_pBaseVals[364] */ - {0x0F12, 0x0600}, /* #TVAR_afit_pBaseVals[365] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[366] */ - {0x0F12, 0x0305}, /* #TVAR_afit_pBaseVals[367] */ - {0x0F12, 0x7802}, /* #TVAR_afit_pBaseVals[368] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[369] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[370] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[371] */ - {0x0F12, 0x2328}, /* #TVAR_afit_pBaseVals[372] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[373] */ - {0x0F12, 0x2A02}, /* #TVAR_afit_pBaseVals[374] */ - {0x0F12, 0x2628}, /* #TVAR_afit_pBaseVals[375] */ - {0x0F12, 0x2826}, /* #TVAR_afit_pBaseVals[376] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[377] */ - {0x0F12, 0x1903}, /* #TVAR_afit_pBaseVals[378] */ - {0x0F12, 0x1E0F}, /* #TVAR_afit_pBaseVals[379] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[380] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[381] */ - {0x0F12, 0x7804}, /* #TVAR_afit_pBaseVals[382] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[383] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[384] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[385] */ - {0x0F12, 0x2803}, /* #TVAR_afit_pBaseVals[386] */ - {0x0F12, 0x0123}, /* #TVAR_afit_pBaseVals[387] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[388] */ - {0x0F12, 0x2024}, /* #TVAR_afit_pBaseVals[389] */ - {0x0F12, 0x1C1C}, /* #TVAR_afit_pBaseVals[390] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[391] */ - {0x0F12, 0x030A}, /* #TVAR_afit_pBaseVals[392] */ - {0x0F12, 0x0A0A}, /* #TVAR_afit_pBaseVals[393] */ - {0x0F12, 0x0A2D}, /* #TVAR_afit_pBaseVals[394] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[395] */ - {0x0F12, 0x0432}, /* #TVAR_afit_pBaseVals[396] */ - {0x0F12, 0x4050}, /* #TVAR_afit_pBaseVals[397] */ - {0x0F12, 0x0F0F}, /* #TVAR_afit_pBaseVals[398] */ - {0x0F12, 0x0440}, /* #TVAR_afit_pBaseVals[399] */ - {0x0F12, 0x0302}, /* #TVAR_afit_pBaseVals[400] */ - {0x0F12, 0x2328}, /* #TVAR_afit_pBaseVals[401] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[402] */ - {0x0F12, 0x3C01}, /* #TVAR_afit_pBaseVals[403] */ - {0x0F12, 0x1C3C}, /* #TVAR_afit_pBaseVals[404] */ - {0x0F12, 0x281C}, /* #TVAR_afit_pBaseVals[405] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[406] */ - {0x0F12, 0x0A03}, /* #TVAR_afit_pBaseVals[407] */ - {0x0F12, 0x2D0A}, /* #TVAR_afit_pBaseVals[408] */ - {0x0F12, 0x070A}, /* #TVAR_afit_pBaseVals[409] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[410] */ - {0x0F12, 0x5004}, /* #TVAR_afit_pBaseVals[411] */ - {0x0F12, 0x0F40}, /* #TVAR_afit_pBaseVals[412] */ - {0x0F12, 0x400F}, /* #TVAR_afit_pBaseVals[413] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[414] */ - {0x0F12, 0x0003}, /* #TVAR_afit_pBaseVals[415] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[416] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[417] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[418] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[419] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[420] */ - {0x0F12, 0x00C4}, /* #TVAR_afit_pBaseVals[421] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[422] */ - {0x0F12, 0x009C}, /* #TVAR_afit_pBaseVals[423] */ - {0x0F12, 0x017C}, /* #TVAR_afit_pBaseVals[424] */ - {0x0F12, 0x03FF}, /* #TVAR_afit_pBaseVals[425] */ - {0x0F12, 0x000C}, /* #TVAR_afit_pBaseVals[426] */ - {0x0F12, 0x0010}, /* #TVAR_afit_pBaseVals[427] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[428] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[429] */ - {0x0F12, 0x003C}, /* #TVAR_afit_pBaseVals[430] */ - {0x0F12, 0x006F}, /* #TVAR_afit_pBaseVals[431] */ - {0x0F12, 0x0070}, /* #TVAR_afit_pBaseVals[432] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[433] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[434] */ - {0x0F12, 0x01AA}, /* #TVAR_afit_pBaseVals[435] */ - {0x0F12, 0x0014}, /* #TVAR_afit_pBaseVals[436] */ - {0x0F12, 0x0014}, /* #TVAR_afit_pBaseVals[437] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[438] */ - {0x0F12, 0x000A}, /* #TVAR_afit_pBaseVals[439] */ - {0x0F12, 0x0122}, /* #TVAR_afit_pBaseVals[440] */ - {0x0F12, 0x003C}, /* #TVAR_afit_pBaseVals[441] */ - {0x0F12, 0x0032}, /* #TVAR_afit_pBaseVals[442] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[443] */ - {0x0F12, 0x0023}, /* #TVAR_afit_pBaseVals[444] */ - {0x0F12, 0x0032}, /* #TVAR_afit_pBaseVals[445] */ - {0x0F12, 0x0A24}, /* #TVAR_afit_pBaseVals[446] */ - {0x0F12, 0x1701}, /* #TVAR_afit_pBaseVals[447] */ - {0x0F12, 0x0229}, /* #TVAR_afit_pBaseVals[448] */ - {0x0F12, 0x1403}, /* #TVAR_afit_pBaseVals[449] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[450] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[451] */ - {0x0F12, 0x0505}, /* #TVAR_afit_pBaseVals[452] */ - {0x0F12, 0x00FF}, /* #TVAR_afit_pBaseVals[453] */ - {0x0F12, 0x043B}, /* #TVAR_afit_pBaseVals[454] */ - {0x0F12, 0x1414}, /* #TVAR_afit_pBaseVals[455] */ - {0x0F12, 0x0301}, /* #TVAR_afit_pBaseVals[456] */ - {0x0F12, 0xFF07}, /* #TVAR_afit_pBaseVals[457] */ - {0x0F12, 0x051E}, /* #TVAR_afit_pBaseVals[458] */ - {0x0F12, 0x0A1E}, /* #TVAR_afit_pBaseVals[459] */ - {0x0F12, 0x0000}, /* #TVAR_afit_pBaseVals[460] */ - {0x0F12, 0x0A04}, /* #TVAR_afit_pBaseVals[461] */ - {0x0F12, 0x0A3C}, /* #TVAR_afit_pBaseVals[462] */ - {0x0F12, 0x0532}, /* #TVAR_afit_pBaseVals[463] */ - {0x0F12, 0x0002}, /* #TVAR_afit_pBaseVals[464] */ - {0x0F12, 0x0096}, /* #TVAR_afit_pBaseVals[465] */ - {0x0F12, 0x1002}, /* #TVAR_afit_pBaseVals[466] */ - {0x0F12, 0x001E}, /* #TVAR_afit_pBaseVals[467] */ - {0x0F12, 0x0900}, /* #TVAR_afit_pBaseVals[468] */ - {0x0F12, 0x0600}, /* #TVAR_afit_pBaseVals[469] */ - {0x0F12, 0x0504}, /* #TVAR_afit_pBaseVals[470] */ - {0x0F12, 0x0305}, /* #TVAR_afit_pBaseVals[471] */ - {0x0F12, 0x7D02}, /* #TVAR_afit_pBaseVals[472] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[473] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[474] */ - {0x0F12, 0x0080}, /* #TVAR_afit_pBaseVals[475] */ - {0x0F12, 0x5050}, /* #TVAR_afit_pBaseVals[476] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[477] */ - {0x0F12, 0x1C02}, /* #TVAR_afit_pBaseVals[478] */ - {0x0F12, 0x191C}, /* #TVAR_afit_pBaseVals[479] */ - {0x0F12, 0x2819}, /* #TVAR_afit_pBaseVals[480] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[481] */ - {0x0F12, 0x1E03}, /* #TVAR_afit_pBaseVals[482] */ - {0x0F12, 0x1E0F}, /* #TVAR_afit_pBaseVals[483] */ - {0x0F12, 0x0508}, /* #TVAR_afit_pBaseVals[484] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[485] */ - {0x0F12, 0x8204}, /* #TVAR_afit_pBaseVals[486] */ - {0x0F12, 0x1448}, /* #TVAR_afit_pBaseVals[487] */ - {0x0F12, 0x4015}, /* #TVAR_afit_pBaseVals[488] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[489] */ - {0x0F12, 0x5003}, /* #TVAR_afit_pBaseVals[490] */ - {0x0F12, 0x0150}, /* #TVAR_afit_pBaseVals[491] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[492] */ - {0x0F12, 0x1E1E}, /* #TVAR_afit_pBaseVals[493] */ - {0x0F12, 0x1212}, /* #TVAR_afit_pBaseVals[494] */ - {0x0F12, 0x0028}, /* #TVAR_afit_pBaseVals[495] */ - {0x0F12, 0x030A}, /* #TVAR_afit_pBaseVals[496] */ - {0x0F12, 0x0A10}, /* #TVAR_afit_pBaseVals[497] */ - {0x0F12, 0x0819}, /* #TVAR_afit_pBaseVals[498] */ - {0x0F12, 0xFF05}, /* #TVAR_afit_pBaseVals[499] */ - {0x0F12, 0x0432}, /* #TVAR_afit_pBaseVals[500] */ - {0x0F12, 0x4052}, /* #TVAR_afit_pBaseVals[501] */ - {0x0F12, 0x1514}, /* #TVAR_afit_pBaseVals[502] */ - {0x0F12, 0x0440}, /* #TVAR_afit_pBaseVals[503] */ - {0x0F12, 0x0302}, /* #TVAR_afit_pBaseVals[504] */ - {0x0F12, 0x5050}, /* #TVAR_afit_pBaseVals[505] */ - {0x0F12, 0x0101}, /* #TVAR_afit_pBaseVals[506] */ - {0x0F12, 0x1E01}, /* #TVAR_afit_pBaseVals[507] */ - {0x0F12, 0x121E}, /* #TVAR_afit_pBaseVals[508] */ - {0x0F12, 0x2812}, /* #TVAR_afit_pBaseVals[509] */ - {0x0F12, 0x0A00}, /* #TVAR_afit_pBaseVals[510] */ - {0x0F12, 0x1003}, /* #TVAR_afit_pBaseVals[511] */ - {0x0F12, 0x190A}, /* #TVAR_afit_pBaseVals[512] */ - {0x0F12, 0x0508}, /* #TVAR_afit_pBaseVals[513] */ - {0x0F12, 0x32FF}, /* #TVAR_afit_pBaseVals[514] */ - {0x0F12, 0x5204}, /* #TVAR_afit_pBaseVals[515] */ - {0x0F12, 0x1440}, /* #TVAR_afit_pBaseVals[516] */ - {0x0F12, 0x4015}, /* #TVAR_afit_pBaseVals[517] */ - {0x0F12, 0x0204}, /* #TVAR_afit_pBaseVals[518] */ - {0x0F12, 0x0003}, /* #TVAR_afit_pBaseVals[519] */ - - /* Update Changed Registers */ - {0x002A, 0x0664}, - {0x0F12, 0x013E}, /* seti_uContrastCenter */ - - /* ====== SET PLL ===== */ - /* How to set */ - /* 1. MCLK */ - /* hex(CLK you want) * 1000) */ - /* 2.System CLK */ - /* hex((CLK you want) * 1000 / 4) */ - /* 3.PCLK */ - /* hex((CLK you want) * 1000 / 4) */ - - /* Set input CLK */ - {0x002A, 0x01CC}, - {0x0F12, 0x5DC0}, /* #REG_TC_IPRM_InClockLSBs */ - {0x0F12, 0x0000}, - {0x002A, 0x01EE}, - {0x0F12, 0x0003}, /* #REG_TC_IPRM_UseNPviClocks - Number of PLL setting */ - /* Set system CLK - 32MHz(0x1F40), 58MHz(0x38a4), can be 24MHz lowest */ - {0x002A, 0x01F6}, - /*{0x0F12, 0x38a4}, */ /* @0x700001F6 First system clock frequency in KHz divided by 4 - 58.000MHz */ - {0x0F12, 0x2EE0}, /* 48MHz 1st SYS_CLK */ - {0x0F12, 0x1770}, /* 24MHz REG_TC_IPRM_MinOutRate4KHz_0 */ - {0x0F12, 0x1780}, /* 24.064MHz REG_TC_IPRM_MaxOutRate4KHz_0 */ - {0x0F12, 0x2710}, /* 40MHz 2nd SYS_CLK, for capture */ - {0x0F12, 0x2700}, /* 39.936MHz REG_TC_IPRM_MinOutRate4KHz_1, for capture */ - {0x0F12, 0x2720}, /* 40.064MHz REG_TC_IPRM_MaxOutRate4KHz_1 */ - {0x0F12, 0x38a4}, - {0x0F12, 0x2310}, - {0x0F12, 0x2340}, - /* Update PLL */ - {0x002A, 0x0208}, - {0x0F12, 0x0001}, /* #REG_TC_IPRM_InitParamsUpdated */ -}; - - -/* Initialization sequence for 480x272 resolution */ -const uint16_t S5K5CAG_480x272[][2]= -{ - /* SET PREVIEW CONFIGURATION_0, Camera Normal 10~30fps */ - /*# Size: 480x272 */ - {0x0028, 0x7000}, /* SET PREVIEW CONFIGURATION_0 */ - {0x002A, 0x026C}, /* SET PREVIEW CONFIGURATION_0 */ - {0x0F12, 0x01e0}, /* #REG_0TC_PCFG_usWidth - 480 */ - {0x0F12, 0x0110}, /* #REG_0TC_PCFG_usHeight - 272 */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_Format */ - {0x0F12, 0x1780}, /* #REG_0TC_PCFG_usMaxOut4KHzRate - 24.064MHz */ - {0x0F12, 0x1760}, /* #REG_0TC_PCFG_usMinOut4KHzRate - 23.936MHz */ - {0x0F12, 0x0100}, /* #REG_0TC_PCFG_OutClkPerPix88 */ - {0x0F12, 0x0800}, /* #REG_0TC_PCFG_uMaxBpp88 */ - /* #REG_0TC_PCFG_PVIMask */ - /* bit0: swap RGB high/low byte */ - /* bit2: VSYNC data blanking level */ - /* bit3: HSYNC data blanking level */ - /*{0x0F12, 0x0052}, */ /* #REG_0TC_PCFG_PVIMask - s0050 = FALSE in MSM6290 : s0052 = TRUE in MSM6800 - reg 027A */ - {0x0F12, 0x005F}, /* #REG_0TC_PCFG_PVIMask - bit0: swap RGB high/low byte */ - {0x0F12, 0x4000}, /* #REG_0TC_PCFG_OIFMask */ - {0x0F12, 0x0400}, /* #REG_0TC_PCFG_usJpegPacketSize */ - {0x0F12, 0x0258}, /* #REG_0TC_PCFG_usJpegTotalPackets */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_uClockInd */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_usFrTimeType */ - {0x0F12, 0x0002}, /* #REG_0TC_PCFG_FrRateQualityType 01:Always achieve the best frame rate. 02:Always achieve the best possible image quality (no-binning mode) */ - /*=================S5K5CAGX_CAM_NOM_MAX_FR_TIME,S5K5CAGX_CAM_NOM_MIN_FR_TIME 30fps~15fps (Arima Use)==================*/ - {0x0F12, 0x03E8}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 10fps */ - {0x0F12, 0x029A}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 15fps */ - /*{0x0F12, 0x014D},*/ /* #REG_0TC_PCFG_usMinFrTimeMsecMult10 - 30fps */ - /*==========================================================================================*/ - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - /* New Configuration FW Sync Preview */ - {0x002A, 0x023C}, - {0x0F12, 0x0000}, - {0x002A, 0x0240}, - {0x0F12, 0x0001}, - {0x002A, 0x0230}, - {0x0F12, 0x0001}, - {0x002A, 0x023E}, - {0x0F12, 0x0001}, - {0x002A, 0x0220}, - {0x0F12, 0x0001}, - {0x0F12, 0x0001}, - - {0x0028, 0xD000}, - {0x002A, 0x1000}, - {0x0F12, 0x0001}, -}; - -/* Initialization sequence for VGA resolution (640x480)*/ -const uint16_t S5K5CAG_VGA[][2]= -{ - /* SET PREVIEW CONFIGURATION_0, Camera Normal 10~30fps */ - /*# Size: VGA 640x480 */ - {0x0028, 0x7000}, /* SET PREVIEW CONFIGURATION_0 */ - {0x002A, 0x026C}, /* SET PREVIEW CONFIGURATION_0 */ - {0x0F12, 0x0280}, /* #REG_0TC_PCFG_usWidth - 640 */ - {0x0F12, 0x01E0}, /* #REG_0TC_PCFG_usHeight - 480 */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_Format */ - {0x0F12, 0x1780}, /* #REG_0TC_PCFG_usMaxOut4KHzRate - 24.064MHz */ - {0x0F12, 0x1760}, /* #REG_0TC_PCFG_usMinOut4KHzRate - 23.936MHz */ - {0x0F12, 0x0100}, /* #REG_0TC_PCFG_OutClkPerPix88 */ - {0x0F12, 0x0800}, /* #REG_0TC_PCFG_uMaxBpp88 */ - /* #REG_0TC_PCFG_PVIMask */ - /* bit0: swap RGB high/low byte */ - /* bit2: VSYNC data blanking level */ - /* bit3: HSYNC data blanking level */ - /*{0x0F12, 0x0052}, */ /* #REG_0TC_PCFG_PVIMask - s0050 = FALSE in MSM6290 : s0052 = TRUE in MSM6800 - reg 027A */ - {0x0F12, 0x005F}, /* #REG_0TC_PCFG_PVIMask - bit0: swap RGB high/low byte */ - {0x0F12, 0x4000}, /* #REG_0TC_PCFG_OIFMask */ - {0x0F12, 0x0400}, /* #REG_0TC_PCFG_usJpegPacketSize */ - {0x0F12, 0x0258}, /* #REG_0TC_PCFG_usJpegTotalPackets */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_uClockInd */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_usFrTimeType */ - {0x0F12, 0x0002}, /* #REG_0TC_PCFG_FrRateQualityType 01:Always achieve the best frame rate. 02:Always achieve the best possible image quality (no-binning mode) */ - /*=================S5K5CAGX_CAM_NOM_MAX_FR_TIME,S5K5CAGX_CAM_NOM_MIN_FR_TIME 30fps~15fps (Arima Use)==================*/ - {0x0F12, 0x03E8}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 10fps */ - {0x0F12, 0x029A}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 15fps */ - /*0x0F12, 0x014D,*/ /* #REG_0TC_PCFG_usMinFrTimeMsecMult10 - 30fps */ - /*==========================================================================================*/ - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - /* New Configuration FW Sync Preview */ - {0x002A, 0x023C}, - {0x0F12, 0x0000}, - {0x002A, 0x0240}, - {0x0F12, 0x0001}, - {0x002A, 0x0230}, - {0x0F12, 0x0001}, - {0x002A, 0x023E}, - {0x0F12, 0x0001}, - {0x002A, 0x0220}, - {0x0F12, 0x0001}, - {0x0F12, 0x0001}, - - {0x0028, 0xD000}, - {0x002A, 0x1000}, - {0x0F12, 0x0001}, -}; - -/* Initialization sequence for QVGA resolution (320x240) */ -const uint16_t S5K5CAG_QVGA[][2]= -{ - /* SET PREVIEW CONFIGURATION_0, Camera Normal 10~30fps */ - /*# Size: QVGA 320x240 */ - {0x0028, 0x7000}, /* SET PREVIEW CONFIGURATION_0 */ - {0x002A, 0x026C}, /* SET PREVIEW CONFIGURATION_0 */ - {0x0F12, 0x0140}, /* #REG_0TC_PCFG_usWidth - 320 */ - {0x0F12, 0x00F0}, /* #REG_0TC_PCFG_usHeight - 240 */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_Format */ - {0x0F12, 0x1780}, /* #REG_0TC_PCFG_usMaxOut4KHzRate - 24.064MHz */ - {0x0F12, 0x1760}, /* #REG_0TC_PCFG_usMinOut4KHzRate - 23.936MHz */ - {0x0F12, 0x0100}, /* #REG_0TC_PCFG_OutClkPerPix88 */ - {0x0F12, 0x0800}, /* #REG_0TC_PCFG_uMaxBpp88 */ - /* #REG_0TC_PCFG_PVIMask */ - /* bit0: swap RGB high/low byte */ - /* bit2: VSYNC data blanking level */ - /* bit3: HSYNC data blanking level */ - /*{0x0F12, 0x0052}, */ /* #REG_0TC_PCFG_PVIMask - s0050 = FALSE in MSM6290 : s0052 = TRUE in MSM6800 - reg 027A */ - {0x0F12, 0x005F}, /* #REG_0TC_PCFG_PVIMask - bit0: swap RGB high/low byte */ - {0x0F12, 0x4000}, /* #REG_0TC_PCFG_OIFMask */ - {0x0F12, 0x0400}, /* #REG_0TC_PCFG_usJpegPacketSize */ - {0x0F12, 0x0258}, /* #REG_0TC_PCFG_usJpegTotalPackets */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_uClockInd */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_usFrTimeType */ - {0x0F12, 0x0002}, /* #REG_0TC_PCFG_FrRateQualityType 01:Always achieve the best frame rate. 02:Always achieve the best possible image quality (no-binning mode) */ - /*=================S5K5CAGX_CAM_NOM_MAX_FR_TIME,S5K5CAGX_CAM_NOM_MIN_FR_TIME 30fps~15fps (Arima Use)==================*/ - {0x0F12, 0x03E8}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 10fps */ - {0x0F12, 0x029A}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 15fps */ - /*{0x0F12, 0x014D},*/ /* #REG_0TC_PCFG_usMinFrTimeMsecMult10 - 30fps */ - /*==========================================================================================*/ - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - /* New Configuration FW Sync Preview */ - {0x002A, 0x023C}, - {0x0F12, 0x0000}, - {0x002A, 0x0240}, - {0x0F12, 0x0001}, - {0x002A, 0x0230}, - {0x0F12, 0x0001}, - {0x002A, 0x023E}, - {0x0F12, 0x0001}, - {0x002A, 0x0220}, - {0x0F12, 0x0001}, - {0x0F12, 0x0001}, - - {0x0028, 0xD000}, - {0x002A, 0x1000}, - {0x0F12, 0x0001}, -}; - -/* Initialization sequence for QQVGA resolution (160x120) */ -const uint16_t S5K5CAG_QQVGA[][2]= -{ - /* SET PREVIEW CONFIGURATION_0, Camera Normal 10~30fps */ - /*# Size: QQVGA 160x120 */ - {0x0028, 0x7000}, /* SET PREVIEW CONFIGURATION_0 */ - {0x002A, 0x026C}, /* SET PREVIEW CONFIGURATION_0 */ - {0x0F12, 0x00A0}, /* #REG_0TC_PCFG_usWidth - 160 */ - {0x0F12, 0x0078}, /* #REG_0TC_PCFG_usHeight - 120 */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_Format */ - {0x0F12, 0x1780}, /* #REG_0TC_PCFG_usMaxOut4KHzRate - 24.064MHz */ - {0x0F12, 0x1760}, /* #REG_0TC_PCFG_usMinOut4KHzRate - 23.936MHz */ - {0x0F12, 0x0100}, /* #REG_0TC_PCFG_OutClkPerPix88 */ - {0x0F12, 0x0800}, /* #REG_0TC_PCFG_uMaxBpp88 */ - /* #REG_0TC_PCFG_PVIMask */ - /* bit0: swap RGB high/low byte */ - /* bit2: VSYNC data blanking level */ - /* bit3: HSYNC data blanking level */ - /*{0x0F12, 0x0052}, */ /* #REG_0TC_PCFG_PVIMask - s0050 = FALSE in MSM6290 : s0052 = TRUE in MSM6800 - reg 027A */ - {0x0F12, 0x005F}, /* #REG_0TC_PCFG_PVIMask - bit0: swap RGB high/low byte */ - {0x0F12, 0x4000}, /* #REG_0TC_PCFG_OIFMask */ - {0x0F12, 0x0400}, /* #REG_0TC_PCFG_usJpegPacketSize */ - {0x0F12, 0x0258}, /* #REG_0TC_PCFG_usJpegTotalPackets */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_uClockInd */ - {0x0F12, 0x0000}, /* #REG_0TC_PCFG_usFrTimeType */ - {0x0F12, 0x0002}, /* #REG_0TC_PCFG_FrRateQualityType 01:Always achieve the best frame rate. 02:Always achieve the best possible image quality (no-binning mode) */ - /*=================S5K5CAGX_CAM_NOM_MAX_FR_TIME,S5K5CAGX_CAM_NOM_MIN_FR_TIME 30fps~15fps (Arima Use)==================*/ - {0x0F12, 0x03E8}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 10fps */ - {0x0F12, 0x029A}, /* #REG_0TC_PCFG_usMaxFrTimeMsecMult10 - 15fps */ - /*{0x0F12, 0x014D},*/ /* #REG_0TC_PCFG_usMinFrTimeMsecMult10 - 30fps */ - /*==========================================================================================*/ - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - {0x0F12, 0x0000}, - - /* New Configuration FW Sync Preview */ - {0x002A, 0x023C}, - {0x0F12, 0x0000}, - {0x002A, 0x0240}, - {0x0F12, 0x0001}, - {0x002A, 0x0230}, - {0x0F12, 0x0001}, - {0x002A, 0x023E}, - {0x0F12, 0x0001}, - {0x002A, 0x0220}, - {0x0F12, 0x0001}, - {0x0F12, 0x0001}, - - {0x0028, 0xD000}, - {0x002A, 0x1000}, - {0x0F12, 0x0001}, -}; - -/** - * @} - */ - -/** @defgroup S5K5CAG_Private_Functions - * @{ - */ - -/** - * @brief Initializes the S5K5CAG CAMERA component. - * @param DeviceAddr: Device address on communication Bus. - * @param resolution: Camera resolution - * @retval None - */ -void s5k5cag_Init(uint16_t DeviceAddr, uint32_t resolution) -{ - uint32_t index; - - /* Initialize I2C */ - CAMERA_IO_Init(); - - if ((resolution == CAMERA_R160x120) || /* Check if resolution is supported */ - (resolution == CAMERA_R320x240) || - (resolution == CAMERA_R480x272) || - (resolution == CAMERA_R640x480)) - { - /* Set common parameters for all resolutions */ - for(index=0; index<(sizeof(S5K5CAG_Common)/4); index++) - { - if(0xFFFF == S5K5CAG_Common[index][0]) - { - CAMERA_Delay(S5K5CAG_Common[index][1]); - } - else - { - CAMERA_IO_Write(DeviceAddr, S5K5CAG_Common[index][0], S5K5CAG_Common[index][1]); - CAMERA_Delay(1); - } - } - - /* Set specific parameters for each resolution */ - switch (resolution) - { - case CAMERA_R160x120: - { - for(index=0; index<(sizeof(S5K5CAG_QQVGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, S5K5CAG_QQVGA[index][0], S5K5CAG_QQVGA[index][1]); - CAMERA_Delay(1); - } - break; - } - case CAMERA_R320x240: - { - for(index=0; index<(sizeof(S5K5CAG_QVGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, S5K5CAG_QVGA[index][0], S5K5CAG_QVGA[index][1]); - CAMERA_Delay(1); - } - break; - } - case CAMERA_R480x272: - { - for(index=0; index<(sizeof(S5K5CAG_480x272)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, S5K5CAG_480x272[index][0], S5K5CAG_480x272[index][1]); - CAMERA_Delay(1); - } - break; - } - case CAMERA_R640x480: - { - for(index=0; index<(sizeof(S5K5CAG_VGA)/4); index++) - { - CAMERA_IO_Write(DeviceAddr, S5K5CAG_VGA[index][0], S5K5CAG_VGA[index][1]); - CAMERA_Delay(1); - } - break; - } - default: - { - break; - } - } - } -} - -/** - * @brief Configures the S5K5CAG camera feature. - * @param DeviceAddr: Device address on communication Bus. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @param brightness_value: Brightness value to be configured - * @retval None - */ -void s5k5cag_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t brightness_value) -{ - uint32_t value_tmp; - uint32_t br_value; - uint32_t r_gain = 0xA0; - uint32_t g_gain = 0xA0; - uint32_t b_gain = 0xA0; - - /* Convert the input value into s5k5cag parameters */ - value_tmp = s5k5cag_ConvertValue(feature, value); - br_value = s5k5cag_ConvertValue(CAMERA_CONTRAST_BRIGHTNESS, brightness_value); - - switch(feature) - { - case CAMERA_BLACK_WHITE: - { - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* Reset previous color effect settings */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04D6); - CAMERA_IO_Write(DeviceAddr, 0x0F12, 0x0001); - CAMERA_Delay(100); /* Wait for 100ms */ - - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_GP_SpecialEffects register (0x70000021E) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x021E); /* REG_TC_GP_SpecialEffects register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, value_tmp); - break; - } - case CAMERA_CONTRAST_BRIGHTNESS: - { - /* Set brightness */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_UserBrightness register (0x70000020C) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x020C); /* REG_TC_UserBrightness register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, br_value); - - /* Set contrast */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_UserContrast register (0x70000020E) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x020E); /* REG_TC_UserContrast register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, value_tmp); - break; - } - case CAMERA_COLOR_EFFECT: - { - /* Reset previous color effect settings */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_DBG_ReInitCmd register (0x700004D6) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04D6); /* REG_TC_DBG_ReInitCmd register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, 0x0001); - CAMERA_Delay(100); /* Wait for 100ms */ - - if (value_tmp == S5K5CAG_COLOR_EFFECT_ANTIQUE) - { - /* Sepia color effect */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_GP_SpecialEffects register (0x70000021E) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x021E); /* REG_TC_GP_SpecialEffects register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, value_tmp); - } - else - { - /* Reset previous special effect view, restore normal view */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_TC_GP_SpecialEffects register (0x70000021E) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x021E); /* REG_TC_GP_SpecialEffects register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, S5K5CAG_BLACK_WHITE_NORMAL); - - switch(value_tmp) - { - case S5K5CAG_COLOR_EFFECT_RED : /* Red color effect */ - r_gain = 0xA0; /* Red gain set to a high level */ - g_gain = 0x40; /* Green gain set to a low level */ - b_gain = 0x50; /* Blue gain set to a low level */ - break; - - case S5K5CAG_COLOR_EFFECT_GREEN : /* Green color effect */ - r_gain = 0x60; /* Red gain set to a low level */ - g_gain = 0xA0; /* Green gain set to a high level */ - b_gain = 0x60; /* Blue gain set to a low level */ - break; - - case S5K5CAG_COLOR_EFFECT_BLUE : /* Blue color effect : */ - r_gain = 0x30; /* Red gain set to a low level */ - g_gain = 0x30; /* Green gain set to a low level */ - b_gain = 0xA0; /* Blue gain set to a high level */ - break; - default : /* No color effect applied */ - value_tmp = S5K5CAG_COLOR_EFFECT_NONE; - break; - } - - if (value_tmp != S5K5CAG_COLOR_EFFECT_NONE) - { - /* Set red gain */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_Rgain register (0x700004A0) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04A0); /* REG_SF_USER_Rgain register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, r_gain); - - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_RgainChanged register (0x700004A2) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04A2); /* REG_SF_USER_RgainChanged */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, 0x1); - - /* Set green gain */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_Ggain register (0x700004A4) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04A4); /* REG_SF_USER_Ggain register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, g_gain); - - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_GgainChanged register (0x700004A6) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04A6); /* REG_SF_USER_GgainChanged */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, 0x1); - - /* Set blue gain */ - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_Bgain register (0x700004A8) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04A8); /* REG_SF_USER_Bgain register */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, b_gain); - - CAMERA_IO_Write(DeviceAddr, 0x0028, 0x7000); /* REG_SF_USER_BgainChanged register (0x700004AA) */ - CAMERA_IO_Write(DeviceAddr, 0x002A, 0x04AA); /* REG_SF_USER_BgainChanged */ - CAMERA_IO_Write(DeviceAddr, 0x0F12, 0x1); - } - } - break; - } - default: - { - break; - } - } -} - -/** - * @brief Read the S5K5CAG Camera identity. - * @param DeviceAddr: Device address on communication Bus. - * @retval the S5K5CAG ID - */ -uint16_t s5k5cag_ReadID(uint16_t DeviceAddr) -{ - /* Initialize I2C */ - CAMERA_IO_Init(); - - /* Prepare the sensor to read the Camera ID */ - CAMERA_IO_Write(DeviceAddr, 0xFCFC, 0x0000); /* page 0x0000 */ - - /* Get the camera ID */ - /* INFO_chipId1 @ 0x00000040 */ - return (CAMERA_IO_Read(DeviceAddr, S5K5CAG_INFO_CHIPID1)); -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ -/** - * @brief Convert input values into s5k5cag parameters. - * @param feature: Camera feature to be configured - * @param value: Value to be configured - * @retval The converted value - */ -static uint32_t s5k5cag_ConvertValue(uint32_t feature, uint32_t value) -{ - uint32_t ret = 0; - - switch(feature) - { - case CAMERA_BLACK_WHITE: - { - switch(value) - { - case CAMERA_BLACK_WHITE_BW: - { - ret = S5K5CAG_BLACK_WHITE_BW; - break; - } - case CAMERA_BLACK_WHITE_NEGATIVE: - { - ret = S5K5CAG_BLACK_WHITE_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_BW_NEGATIVE: - { - ret = S5K5CAG_BLACK_WHITE_BW_NEGATIVE; - break; - } - case CAMERA_BLACK_WHITE_NORMAL: - { - ret = S5K5CAG_BLACK_WHITE_NORMAL; - break; - } - default: - { - ret = S5K5CAG_BLACK_WHITE_NORMAL; - break; - } - } - break; - } - case CAMERA_CONTRAST_BRIGHTNESS: - { - switch(value) - { - case CAMERA_BRIGHTNESS_LEVEL0: - { - ret = S5K5CAG_BRIGHTNESS_LEVEL0; - break; - } - case CAMERA_BRIGHTNESS_LEVEL1: - { - ret = S5K5CAG_BRIGHTNESS_LEVEL1; - break; - } - case CAMERA_BRIGHTNESS_LEVEL2: - { - ret = S5K5CAG_BRIGHTNESS_LEVEL2; - break; - } - case CAMERA_BRIGHTNESS_LEVEL3: - { - ret = S5K5CAG_BRIGHTNESS_LEVEL3; - break; - } - case CAMERA_BRIGHTNESS_LEVEL4: - { - ret = S5K5CAG_BRIGHTNESS_LEVEL4; - break; - } - case CAMERA_CONTRAST_LEVEL0: - { - ret = S5K5CAG_CONTRAST_LEVEL0; - break; - } - case CAMERA_CONTRAST_LEVEL1: - { - ret = S5K5CAG_CONTRAST_LEVEL1; - break; - } - case CAMERA_CONTRAST_LEVEL2: - { - ret = S5K5CAG_CONTRAST_LEVEL2; - break; - } - case CAMERA_CONTRAST_LEVEL3: - { - ret = S5K5CAG_CONTRAST_LEVEL3; - break; - } - case CAMERA_CONTRAST_LEVEL4: - { - ret = S5K5CAG_CONTRAST_LEVEL4; - break; - } - default: - { - ret = S5K5CAG_CONTRAST_LEVEL0; - break; - } - } - break; - } - case CAMERA_COLOR_EFFECT: - { - switch(value) - { - case CAMERA_COLOR_EFFECT_ANTIQUE: - { - ret = S5K5CAG_COLOR_EFFECT_ANTIQUE; - break; - } - case CAMERA_COLOR_EFFECT_BLUE: - { - ret = S5K5CAG_COLOR_EFFECT_BLUE; - break; - } - case CAMERA_COLOR_EFFECT_GREEN: - { - ret = S5K5CAG_COLOR_EFFECT_GREEN; - break; - } - case CAMERA_COLOR_EFFECT_RED: - { - ret = S5K5CAG_COLOR_EFFECT_RED; - break; - } - default: - { - ret = S5K5CAG_COLOR_EFFECT_NONE; - break; - } - } - break; - default: - { - ret = 0; - break; - } - } - } - - return ret; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/s5k5cag/s5k5cag.h b/Drivers/BSP/Components/s5k5cag/s5k5cag.h deleted file mode 100644 index 8b2c770210..0000000000 --- a/Drivers/BSP/Components/s5k5cag/s5k5cag.h +++ /dev/null @@ -1,127 +0,0 @@ -/** - ****************************************************************************** - * @file s5k5cag.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the s5k5cag.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __S5K5CAG_H -#define __S5K5CAG_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup s5k5cag - * @{ - */ - -/** @defgroup S5K5CAG_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup S5K5CAG_Exported_Constants - * @{ - */ -/** - * @brief S5K5CAG ID - */ -#define S5K5CAG_ID ((uint16_t)0x05CA) -/** - * @brief S5K5CAG Registers - */ -#define S5K5CAG_INFO_CHIPID1 ((uint16_t)0x0040) -#define S5K5CAG_INFO_CHIPID2 ((uint16_t)0x0042) -#define S5K5CAG_INFO_SVNVERSION ((uint16_t)0x0048) -#define S5K5CAG_INFO_DATE ((uint16_t)0x004E) - -/** - * @brief S5K5CAG Features Parameters - */ -#define S5K5CAG_BRIGHTNESS_LEVEL0 ((uint16_t)0xFF00) /* Brightness level -2 */ -#define S5K5CAG_BRIGHTNESS_LEVEL1 ((uint16_t)0xFFC0) /* Brightness level -1 */ -#define S5K5CAG_BRIGHTNESS_LEVEL2 ((uint16_t)0x0000) /* Brightness level 0 */ -#define S5K5CAG_BRIGHTNESS_LEVEL3 ((uint16_t)0x0050) /* Brightness level +1 */ -#define S5K5CAG_BRIGHTNESS_LEVEL4 ((uint16_t)0x0080) /* Brightness level +2 */ - -#define S5K5CAG_BLACK_WHITE_BW ((uint16_t)0x0001) /* Black and white effect */ -#define S5K5CAG_BLACK_WHITE_NEGATIVE ((uint16_t)0x0003) /* Negative effect */ -#define S5K5CAG_BLACK_WHITE_BW_NEGATIVE ((uint16_t)0x0002) /* BW and Negative effect */ -#define S5K5CAG_BLACK_WHITE_NORMAL ((uint16_t)0x0000) /* Normal effect */ - -#define S5K5CAG_CONTRAST_LEVEL0 ((uint16_t)0xFF80) /* Contrast level -2 */ -#define S5K5CAG_CONTRAST_LEVEL1 ((uint16_t)0xFFC0) /* Contrast level -1 */ -#define S5K5CAG_CONTRAST_LEVEL2 ((uint16_t)0x0000) /* Contrast level 0 */ -#define S5K5CAG_CONTRAST_LEVEL3 ((uint16_t)0x0050) /* Contrast level -1 */ -#define S5K5CAG_CONTRAST_LEVEL4 ((uint16_t)0x0080) /* Contrast level -2 */ - -#define S5K5CAG_COLOR_EFFECT_NONE ((uint16_t)0x0000) /* No color effect */ -#define S5K5CAG_COLOR_EFFECT_ANTIQUE ((uint16_t)0x0004) /* Antique effect */ -#define S5K5CAG_COLOR_EFFECT_BLUE ((uint16_t)0x0001) /* Blue effect */ -#define S5K5CAG_COLOR_EFFECT_GREEN ((uint16_t)0x0002) /* Green effect */ -#define S5K5CAG_COLOR_EFFECT_RED ((uint16_t)0x0003) /* Red effect */ -/** - * @} - */ - -/** @defgroup S5K5CAG_Exported_Functions - * @{ - */ -void s5k5cag_Init(uint16_t DeviceAddr, uint32_t resolution); -void s5k5cag_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t BR_value); -uint16_t s5k5cag_ReadID(uint16_t DeviceAddr); - -void CAMERA_IO_Init(void); -void CAMERA_IO_Write(uint8_t addr, uint16_t reg, uint16_t value); -uint16_t CAMERA_IO_Read(uint8_t addr, uint16_t reg); -void CAMERA_Delay(uint32_t delay); - -/* CAMERA driver structure */ -extern CAMERA_DrvTypeDef s5k5cag_drv; -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __S5K5CAG_H */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/st7735 b/Drivers/BSP/Components/st7735 new file mode 160000 index 0000000000..2b7db825b3 --- /dev/null +++ b/Drivers/BSP/Components/st7735 @@ -0,0 +1 @@ +Subproject commit 2b7db825b3946fd19a158947f9be685e761bed3d diff --git a/Drivers/BSP/Components/st7735/LICENSE.md b/Drivers/BSP/Components/st7735/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/st7735/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/st7735/Release_Notes.html b/Drivers/BSP/Components/st7735/Release_Notes.html deleted file mode 100644 index 51ea7353ec..0000000000 --- a/Drivers/BSP/Components/st7735/Release_Notes.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - Release Notes for ST7735 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

ST7735 Component Drivers

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the ST7735 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Fix “Back to Release page†link
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • st7735.h: change Ҡby “/†in the include path to fix compilation issues under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • LCD Component driver update in order to harmonize all LCD controllers Link usage (Change LCD_IO_WriteData to LCD_IO_WriteMultipleData)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/st7735/_htmresc/favicon.png b/Drivers/BSP/Components/st7735/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/st7735/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/st7735/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/st7735/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/st7735/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/st7735/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/st7735/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/st7735/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/st7735/st7735.c b/Drivers/BSP/Components/st7735/st7735.c deleted file mode 100644 index b124ac2fca..0000000000 --- a/Drivers/BSP/Components/st7735/st7735.c +++ /dev/null @@ -1,449 +0,0 @@ -/** - ****************************************************************************** - * @file st7735.c - * @author MCD Application Team - * @brief This file includes the driver for ST7735 LCD mounted on the Adafruit - * 1.8" TFT LCD shield (reference ID 802). - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "st7735.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ST7735 - * @brief This file provides a set of functions needed to drive the - * ST7735 LCD. - * @{ - */ - -/** @defgroup ST7735_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7735_Private_Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7735_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7735_Private_Variables - * @{ - */ - - -LCD_DrvTypeDef st7735_drv = -{ - st7735_Init, - 0, - st7735_DisplayOn, - st7735_DisplayOff, - st7735_SetCursor, - st7735_WritePixel, - 0, - st7735_SetDisplayWindow, - st7735_DrawHLine, - st7735_DrawVLine, - st7735_GetLcdPixelWidth, - st7735_GetLcdPixelHeight, - st7735_DrawBitmap, -}; - -static uint16_t ArrayRGB[320] = {0}; - -/** -* @} -*/ - -/** @defgroup ST7735_Private_FunctionPrototypes - * @{ - */ - -/** -* @} -*/ - -/** @defgroup ST7735_Private_Functions - * @{ - */ - -/** - * @brief Initialize the ST7735 LCD Component. - * @param None - * @retval None - */ -void st7735_Init(void) -{ - uint8_t data = 0; - - /* Initialize ST7735 low level bus layer -----------------------------------*/ - LCD_IO_Init(); - /* Out of sleep mode, 0 args, no delay */ - st7735_WriteReg(LCD_REG_17, 0x00); - /* Frame rate ctrl - normal mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)*/ - LCD_IO_WriteReg(LCD_REG_177); - data = 0x01; - LCD_IO_WriteMultipleData(&data, 1); - data = 0x2C; - LCD_IO_WriteMultipleData(&data, 1); - data = 0x2D; - LCD_IO_WriteMultipleData(&data, 1); - /* Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D) */ - st7735_WriteReg(LCD_REG_178, 0x01); - st7735_WriteReg(LCD_REG_178, 0x2C); - st7735_WriteReg(LCD_REG_178, 0x2D); - /* Frame rate ctrl - partial mode, 6 args: Dot inversion mode, Line inversion mode */ - st7735_WriteReg(LCD_REG_179, 0x01); - st7735_WriteReg(LCD_REG_179, 0x2C); - st7735_WriteReg(LCD_REG_179, 0x2D); - st7735_WriteReg(LCD_REG_179, 0x01); - st7735_WriteReg(LCD_REG_179, 0x2C); - st7735_WriteReg(LCD_REG_179, 0x2D); - /* Display inversion ctrl, 1 arg, no delay: No inversion */ - st7735_WriteReg(LCD_REG_180, 0x07); - /* Power control, 3 args, no delay: -4.6V , AUTO mode */ - st7735_WriteReg(LCD_REG_192, 0xA2); - st7735_WriteReg(LCD_REG_192, 0x02); - st7735_WriteReg(LCD_REG_192, 0x84); - /* Power control, 1 arg, no delay: VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD */ - st7735_WriteReg(LCD_REG_193, 0xC5); - /* Power control, 2 args, no delay: Opamp current small, Boost frequency */ - st7735_WriteReg(LCD_REG_194, 0x0A); - st7735_WriteReg(LCD_REG_194, 0x00); - /* Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low */ - st7735_WriteReg(LCD_REG_195, 0x8A); - st7735_WriteReg(LCD_REG_195, 0x2A); - /* Power control, 2 args, no delay */ - st7735_WriteReg(LCD_REG_196, 0x8A); - st7735_WriteReg(LCD_REG_196, 0xEE); - /* Power control, 1 arg, no delay */ - st7735_WriteReg(LCD_REG_197, 0x0E); - /* Don't invert display, no args, no delay */ - LCD_IO_WriteReg(LCD_REG_32); - /* Set color mode, 1 arg, no delay: 16-bit color */ - st7735_WriteReg(LCD_REG_58, 0x05); - /* Column addr set, 4 args, no delay: XSTART = 0, XEND = 127 */ - LCD_IO_WriteReg(LCD_REG_42); - data = 0x00; - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteMultipleData(&data, 1); - data = 0x7F; - LCD_IO_WriteMultipleData(&data, 1); - /* Row addr set, 4 args, no delay: YSTART = 0, YEND = 159 */ - LCD_IO_WriteReg(LCD_REG_43); - data = 0x00; - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteMultipleData(&data, 1); - data = 0x9F; - LCD_IO_WriteMultipleData(&data, 1); - /* Magical unicorn dust, 16 args, no delay */ - st7735_WriteReg(LCD_REG_224, 0x02); - st7735_WriteReg(LCD_REG_224, 0x1c); - st7735_WriteReg(LCD_REG_224, 0x07); - st7735_WriteReg(LCD_REG_224, 0x12); - st7735_WriteReg(LCD_REG_224, 0x37); - st7735_WriteReg(LCD_REG_224, 0x32); - st7735_WriteReg(LCD_REG_224, 0x29); - st7735_WriteReg(LCD_REG_224, 0x2d); - st7735_WriteReg(LCD_REG_224, 0x29); - st7735_WriteReg(LCD_REG_224, 0x25); - st7735_WriteReg(LCD_REG_224, 0x2B); - st7735_WriteReg(LCD_REG_224, 0x39); - st7735_WriteReg(LCD_REG_224, 0x00); - st7735_WriteReg(LCD_REG_224, 0x01); - st7735_WriteReg(LCD_REG_224, 0x03); - st7735_WriteReg(LCD_REG_224, 0x10); - /* Sparkles and rainbows, 16 args, no delay */ - st7735_WriteReg(LCD_REG_225, 0x03); - st7735_WriteReg(LCD_REG_225, 0x1d); - st7735_WriteReg(LCD_REG_225, 0x07); - st7735_WriteReg(LCD_REG_225, 0x06); - st7735_WriteReg(LCD_REG_225, 0x2E); - st7735_WriteReg(LCD_REG_225, 0x2C); - st7735_WriteReg(LCD_REG_225, 0x29); - st7735_WriteReg(LCD_REG_225, 0x2D); - st7735_WriteReg(LCD_REG_225, 0x2E); - st7735_WriteReg(LCD_REG_225, 0x2E); - st7735_WriteReg(LCD_REG_225, 0x37); - st7735_WriteReg(LCD_REG_225, 0x3F); - st7735_WriteReg(LCD_REG_225, 0x00); - st7735_WriteReg(LCD_REG_225, 0x00); - st7735_WriteReg(LCD_REG_225, 0x02); - st7735_WriteReg(LCD_REG_225, 0x10); - /* Normal display on, no args, no delay */ - st7735_WriteReg(LCD_REG_19, 0x00); - /* Main screen turn on, no delay */ - st7735_WriteReg(LCD_REG_41, 0x00); - /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */ - st7735_WriteReg(LCD_REG_54, 0xC0); -} - -/** - * @brief Enables the Display. - * @param None - * @retval None - */ -void st7735_DisplayOn(void) -{ - uint8_t data = 0; - LCD_IO_WriteReg(LCD_REG_19); - LCD_Delay(10); - LCD_IO_WriteReg(LCD_REG_41); - LCD_Delay(10); - LCD_IO_WriteReg(LCD_REG_54); - data = 0xC0; - LCD_IO_WriteMultipleData(&data, 1); -} - -/** - * @brief Disables the Display. - * @param None - * @retval None - */ -void st7735_DisplayOff(void) -{ - uint8_t data = 0; - LCD_IO_WriteReg(LCD_REG_19); - LCD_Delay(10); - LCD_IO_WriteReg(LCD_REG_40); - LCD_Delay(10); - LCD_IO_WriteReg(LCD_REG_54); - data = 0xC0; - LCD_IO_WriteMultipleData(&data, 1); -} - -/** - * @brief Sets Cursor position. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval None - */ -void st7735_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - uint8_t data = 0; - LCD_IO_WriteReg(LCD_REG_42); - data = (Xpos) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Xpos) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteReg(LCD_REG_43); - data = (Ypos) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Ypos) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); - LCD_IO_WriteReg(LCD_REG_44); -} - -/** - * @brief Writes pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param RGBCode: the RGB pixel color - * @retval None - */ -void st7735_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode) -{ - uint8_t data = 0; - if((Xpos >= ST7735_LCD_PIXEL_WIDTH) || (Ypos >= ST7735_LCD_PIXEL_HEIGHT)) - { - return; - } - - /* Set Cursor */ - st7735_SetCursor(Xpos, Ypos); - - data = RGBCode >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = RGBCode; - LCD_IO_WriteMultipleData(&data, 1); -} - - -/** - * @brief Writes to the selected LCD register. - * @param LCDReg: Address of the selected register. - * @param LCDRegValue: value to write to the selected register. - * @retval None - */ -void st7735_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue) -{ - LCD_IO_WriteReg(LCDReg); - LCD_IO_WriteMultipleData(&LCDRegValue, 1); -} - -/** - * @brief Sets a display window - * @param Xpos: specifies the X bottom left position. - * @param Ypos: specifies the Y bottom left position. - * @param Height: display window height. - * @param Width: display window width. - * @retval None - */ -void st7735_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - uint8_t data = 0; - /* Column addr set, 4 args, no delay: XSTART = Xpos, XEND = (Xpos + Width - 1) */ - LCD_IO_WriteReg(LCD_REG_42); - data = (Xpos) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Xpos) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); - data = (Xpos + Width - 1) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Xpos + Width - 1) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); - /* Row addr set, 4 args, no delay: YSTART = Ypos, YEND = (Ypos + Height - 1) */ - LCD_IO_WriteReg(LCD_REG_43); - data = (Ypos) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Ypos) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); - data = (Ypos + Height - 1) >> 8; - LCD_IO_WriteMultipleData(&data, 1); - data = (Ypos + Height - 1) & 0xFF; - LCD_IO_WriteMultipleData(&data, 1); -} - -/** - * @brief Draws horizontal line. - * @param RGBCode: Specifies the RGB color - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param Length: specifies the line length. - * @retval None - */ -void st7735_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint8_t counter = 0; - - if(Xpos + Length > ST7735_LCD_PIXEL_WIDTH) return; - - /* Set Cursor */ - st7735_SetCursor(Xpos, Ypos); - - for(counter = 0; counter < Length; counter++) - { - ArrayRGB[counter] = RGBCode; - } - LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2); -} - -/** - * @brief Draws vertical line. - * @param RGBCode: Specifies the RGB color - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param Length: specifies the line length. - * @retval None - */ -void st7735_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint8_t counter = 0; - - if(Ypos + Length > ST7735_LCD_PIXEL_HEIGHT) return; - for(counter = 0; counter < Length; counter++) - { - st7735_WritePixel(Xpos, Ypos + counter, RGBCode); - } -} - -/** - * @brief Gets the LCD pixel Width. - * @param None - * @retval The Lcd Pixel Width - */ -uint16_t st7735_GetLcdPixelWidth(void) -{ - return ST7735_LCD_PIXEL_WIDTH; -} - -/** - * @brief Gets the LCD pixel Height. - * @param None - * @retval The Lcd Pixel Height - */ -uint16_t st7735_GetLcdPixelHeight(void) -{ - return ST7735_LCD_PIXEL_HEIGHT; -} - -/** - * @brief Displays a bitmap picture loaded in the internal Flash. - * @param BmpAddress: Bmp picture address in the internal Flash. - * @retval None - */ -void st7735_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, size = 0; - - /* Read bitmap size */ - size = *(volatile uint16_t *) (pbmp + 2); - size |= (*(volatile uint16_t *) (pbmp + 4)) << 16; - /* Get bitmap data address offset */ - index = *(volatile uint16_t *) (pbmp + 10); - index |= (*(volatile uint16_t *) (pbmp + 12)) << 16; - size = (size - index)/2; - pbmp += index; - - /* Set GRAM write direction and BGR = 0 */ - /* Memory access control: MY = 0, MX = 1, MV = 0, ML = 0 */ - st7735_WriteReg(LCD_REG_54, 0x40); - - /* Set Cursor */ - st7735_SetCursor(Xpos, Ypos); - - LCD_IO_WriteMultipleData((uint8_t*)pbmp, size*2); - - /* Set GRAM write direction and BGR = 0 */ - /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */ - st7735_WriteReg(LCD_REG_54, 0xC0); -} - -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ - -/** -* @} -*/ diff --git a/Drivers/BSP/Components/st7735/st7735.h b/Drivers/BSP/Components/st7735/st7735.h deleted file mode 100644 index fba6d527ed..0000000000 --- a/Drivers/BSP/Components/st7735/st7735.h +++ /dev/null @@ -1,193 +0,0 @@ -/** - ****************************************************************************** - * @file st7735.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the st7735.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __ST7735_H -#define __ST7735_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/lcd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ST7735 - * @{ - */ - -/** @defgroup ST7735_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7735_Exported_Constants - * @{ - */ - -/** - * @brief ST7735 Size - */ -#define ST7735_LCD_PIXEL_WIDTH ((uint16_t)128) -#define ST7735_LCD_PIXEL_HEIGHT ((uint16_t)160) - -/** - * @brief ST7735 Registers - */ -#define LCD_REG_0 0x00 /* No Operation: NOP */ -#define LCD_REG_1 0x01 /* Software reset: SWRESET */ -#define LCD_REG_4 0x04 /* Read Display ID: RDDID */ -#define LCD_REG_9 0x09 /* Read Display Statu: RDDST */ -#define LCD_REG_10 0x0A /* Read Display Power: RDDPM */ -#define LCD_REG_11 0x0B /* Read Display: RDDMADCTL */ -#define LCD_REG_12 0x0C /* Read Display Pixel: RDDCOLMOD */ -#define LCD_REG_13 0x0D /* Read Display Image: RDDIM */ -#define LCD_REG_14 0x0E /* Read Display Signal: RDDSM */ -#define LCD_REG_16 0x10 /* Sleep in & booster off: SLPIN */ -#define LCD_REG_17 0x11 /* Sleep out & booster on: SLPOUT */ -#define LCD_REG_18 0x12 /* Partial mode on: PTLON */ -#define LCD_REG_19 0x13 /* Partial off (Normal): NORON */ -#define LCD_REG_32 0x20 /* Display inversion off: INVOFF */ -#define LCD_REG_33 0x21 /* Display inversion on: INVON */ -#define LCD_REG_38 0x26 /* Gamma curve select: GAMSET */ -#define LCD_REG_40 0x28 /* Display off: DISPOFF */ -#define LCD_REG_41 0x29 /* Display on: DISPON */ -#define LCD_REG_42 0x2A /* Column address set: CASET */ -#define LCD_REG_43 0x2B /* Row address set: RASET */ -#define LCD_REG_44 0x2C /* Memory write: RAMWR */ -#define LCD_REG_45 0x2D /* LUT for 4k,65k,262k color: RGBSET */ -#define LCD_REG_46 0x2E /* Memory read: RAMRD*/ -#define LCD_REG_48 0x30 /* Partial start/end address set: PTLAR */ -#define LCD_REG_52 0x34 /* Tearing effect line off: TEOFF */ -#define LCD_REG_53 0x35 /* Tearing effect mode set & on: TEON */ -#define LCD_REG_54 0x36 /* Memory data access control: MADCTL */ -#define LCD_REG_56 0x38 /* Idle mode off: IDMOFF */ -#define LCD_REG_57 0x39 /* Idle mode on: IDMON */ -#define LCD_REG_58 0x3A /* Interface pixel format: COLMOD */ -#define LCD_REG_177 0xB1 /* In normal mode (Full colors): FRMCTR1 */ -#define LCD_REG_178 0xB2 /* In Idle mode (8-colors): FRMCTR2 */ -#define LCD_REG_179 0xB3 /* In partial mode + Full colors: FRMCTR3 */ -#define LCD_REG_180 0xB4 /* Display inversion control: INVCTR */ -#define LCD_REG_192 0xC0 /* Power control setting: PWCTR1 */ -#define LCD_REG_193 0xC1 /* Power control setting: PWCTR2 */ -#define LCD_REG_194 0xC2 /* In normal mode (Full colors): PWCTR3 */ -#define LCD_REG_195 0xC3 /* In Idle mode (8-colors): PWCTR4 */ -#define LCD_REG_196 0xC4 /* In partial mode + Full colors: PWCTR5 */ -#define LCD_REG_197 0xC5 /* VCOM control 1: VMCTR1 */ -#define LCD_REG_199 0xC7 /* Set VCOM offset control: VMOFCTR */ -#define LCD_REG_209 0xD1 /* Set LCM version code: WRID2 */ -#define LCD_REG_210 0xD2 /* Customer Project code: WRID3 */ -#define LCD_REG_217 0xD9 /* NVM control status: NVCTR1 */ -#define LCD_REG_218 0xDA /* Read ID1: RDID1 */ -#define LCD_REG_219 0xDB /* Read ID2: RDID2 */ -#define LCD_REG_220 0xDC /* Read ID3: RDID3 */ -#define LCD_REG_222 0xDE /* NVM Read Command: NVCTR2 */ -#define LCD_REG_223 0xDF /* NVM Write Command: NVCTR3 */ -#define LCD_REG_224 0xE0 /* Set Gamma adjustment (+ polarity): GAMCTRP1 */ -#define LCD_REG_225 0xE1 /* Set Gamma adjustment (- polarity): GAMCTRN1 */ - -/** - * @brief LCD Lines depending on the chosen fonts. - */ -#define LCD_LINE_0 LINE(0) -#define LCD_LINE_1 LINE(1) -#define LCD_LINE_2 LINE(2) -#define LCD_LINE_3 LINE(3) -#define LCD_LINE_4 LINE(4) -#define LCD_LINE_5 LINE(5) -#define LCD_LINE_6 LINE(6) -#define LCD_LINE_7 LINE(7) -#define LCD_LINE_8 LINE(8) -#define LCD_LINE_9 LINE(9) -#define LCD_LINE_10 LINE(10) -#define LCD_LINE_11 LINE(11) -#define LCD_LINE_12 LINE(12) -#define LCD_LINE_13 LINE(13) -#define LCD_LINE_14 LINE(14) -#define LCD_LINE_15 LINE(15) -#define LCD_LINE_16 LINE(16) -#define LCD_LINE_17 LINE(17) -#define LCD_LINE_18 LINE(18) -#define LCD_LINE_19 LINE(19) - -/** - * @} - */ - -/** @defgroup ADAFRUIT_SPI_LCD_Exported_Functions - * @{ - */ -void st7735_Init(void); -uint16_t st7735_ReadID(void); - -void st7735_DisplayOn(void); -void st7735_DisplayOff(void); -void st7735_SetCursor(uint16_t Xpos, uint16_t Ypos); -void st7735_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode); -void st7735_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue); -uint8_t st7735_ReadReg(uint8_t LCDReg); - -void st7735_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void st7735_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void st7735_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); - -uint16_t st7735_GetLcdPixelWidth(void); -uint16_t st7735_GetLcdPixelHeight(void); -void st7735_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); - -/* LCD driver structure */ -extern LCD_DrvTypeDef st7735_drv; - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size); -void LCD_IO_WriteReg(uint8_t Reg); -void LCD_Delay(uint32_t delay); -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __ST7735_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/st7789h2 b/Drivers/BSP/Components/st7789h2 new file mode 160000 index 0000000000..77e43f40af --- /dev/null +++ b/Drivers/BSP/Components/st7789h2 @@ -0,0 +1 @@ +Subproject commit 77e43f40af8a6101547f73f2c21dd25650b4bfa1 diff --git a/Drivers/BSP/Components/st7789h2/LICENSE.md b/Drivers/BSP/Components/st7789h2/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/st7789h2/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/st7789h2/Release_Notes.html b/Drivers/BSP/Components/st7789h2/Release_Notes.html deleted file mode 100644 index d4e2ccea70..0000000000 --- a/Drivers/BSP/Components/st7789h2/Release_Notes.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - Release Notes for ST7789H2 Component Driver - - - - - - -
-
-
-

Release Notes for

-

ST7789H2 Component Driver

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the ST7789H2 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove useless assignment in ST7789H2_DrawHLine() and ST7789H2_DrawVLine() functions.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • st7789h2.c/.h: -
      -
    • Change “\†by “/†in the include path to fix compilation issue under linux
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • st7789h2.c/.h: -
      -
    • Add 180° orientation support
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • st7789h2.c: -
      -
    • Update ST7789H2_DisplayOn(
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/st7789h2/_htmresc/favicon.png b/Drivers/BSP/Components/st7789h2/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/st7789h2/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/st7789h2/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/st7789h2/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/st7789h2/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/st7789h2/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/st7789h2/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/st7789h2/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/st7789h2/st7789h2.c b/Drivers/BSP/Components/st7789h2/st7789h2.c deleted file mode 100644 index c37f65680e..0000000000 --- a/Drivers/BSP/Components/st7789h2/st7789h2.c +++ /dev/null @@ -1,704 +0,0 @@ -/** - ****************************************************************************** - * @file st7789h2.c - * @author MCD Application Team - * @brief This file includes the LCD driver for st7789h2 LCD. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "st7789h2.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup ST7789H2 - * @brief This file provides a set of functions needed to drive the - * FRIDA FRD154BP2901 LCD. - * @{ - */ - -/** @defgroup ST7789H2_Private_TypesDefinitions ST7789H2 Private TypesDefinitions - * @{ - */ -typedef struct { - uint8_t red; - uint8_t green; - uint8_t blue; -} ST7789H2_Rgb888; - -/** - * @} - */ - -/** @defgroup ST7789H2_Private_Defines ST7789H2 Private Defines - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7789H2_Private_Macros ST7789H2 Private Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup ST7789H2_Private_Variables ST7789H2 Private Variables - * @{ - */ -LCD_DrvTypeDef ST7789H2_drv = -{ - ST7789H2_Init, - ST7789H2_ReadID, - ST7789H2_DisplayOn, - ST7789H2_DisplayOff, - ST7789H2_SetCursor, - ST7789H2_WritePixel, - ST7789H2_ReadPixel, - ST7789H2_SetDisplayWindow, - ST7789H2_DrawHLine, - ST7789H2_DrawVLine, - ST7789H2_GetLcdPixelWidth, - ST7789H2_GetLcdPixelHeight, - ST7789H2_DrawBitmap, - ST7789H2_DrawRGBImage, -}; - -static uint16_t WindowsXstart = 0; -static uint16_t WindowsYstart = 0; -static uint16_t WindowsXend = ST7789H2_LCD_PIXEL_WIDTH-1; -static uint16_t WindowsYend = ST7789H2_LCD_PIXEL_HEIGHT-1; -/** - * @} - */ - -/** @defgroup ST7789H2_Private_FunctionPrototypes ST7789H2 Private FunctionPrototypes - * @{ - */ -static ST7789H2_Rgb888 ST7789H2_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos); -static void ST7789H2_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata); - -/** - * @} - */ - -/** @defgroup ST7789H2_Private_Functions ST7789H2 Private Functions - * @{ - */ - -/** - * @brief Initialize the st7789h2 LCD Component. - * @param None - * @retval None - */ -void ST7789H2_Init(void) -{ - uint8_t parameter[14]; - - /* Initialize st7789h2 low level bus layer ----------------------------------*/ - LCD_IO_Init(); - /* Sleep In Command */ - ST7789H2_WriteReg(ST7789H2_SLEEP_IN, (uint8_t*)NULL, 0); - /* Wait for 10ms */ - LCD_IO_Delay(10); - - /* SW Reset Command */ - ST7789H2_WriteReg(0x01, (uint8_t*)NULL, 0); - /* Wait for 200ms */ - LCD_IO_Delay(200); - - /* Sleep Out Command */ - ST7789H2_WriteReg(ST7789H2_SLEEP_OUT, (uint8_t*)NULL, 0); - /* Wait for 120ms */ - LCD_IO_Delay(120); - - /* Normal display for Driver Down side */ - parameter[0] = 0x00; - ST7789H2_WriteReg(ST7789H2_NORMAL_DISPLAY, parameter, 1); - - /* Color mode 16bits/pixel */ - parameter[0] = 0x05; - ST7789H2_WriteReg(ST7789H2_COLOR_MODE, parameter, 1); - - /* Display inversion On */ - ST7789H2_WriteReg(ST7789H2_DISPLAY_INVERSION, (uint8_t*)NULL, 0); - - /* Set Column address CASET */ - parameter[0] = 0x00; - parameter[1] = 0x00; - parameter[2] = 0x00; - parameter[3] = 0xEF; - ST7789H2_WriteReg(ST7789H2_CASET, parameter, 4); - /* Set Row address RASET */ - parameter[0] = 0x00; - parameter[1] = 0x00; - parameter[2] = 0x00; - parameter[3] = 0xEF; - ST7789H2_WriteReg(ST7789H2_RASET, parameter, 4); - - /*--------------- ST7789H2 Frame rate setting -------------------------------*/ - /* PORCH control setting */ - parameter[0] = 0x0C; - parameter[1] = 0x0C; - parameter[2] = 0x00; - parameter[3] = 0x33; - parameter[4] = 0x33; - ST7789H2_WriteReg(ST7789H2_PORCH_CTRL, parameter, 5); - - /* GATE control setting */ - parameter[0] = 0x35; - ST7789H2_WriteReg(ST7789H2_GATE_CTRL, parameter, 1); - - /*--------------- ST7789H2 Power setting ------------------------------------*/ - /* VCOM setting */ - parameter[0] = 0x1F; - ST7789H2_WriteReg(ST7789H2_VCOM_SET, parameter, 1); - - /* LCM Control setting */ - parameter[0] = 0x2C; - ST7789H2_WriteReg(ST7789H2_LCM_CTRL, parameter, 1); - - /* VDV and VRH Command Enable */ - parameter[0] = 0x01; - parameter[1] = 0xC3; - ST7789H2_WriteReg(ST7789H2_VDV_VRH_EN, parameter, 2); - - /* VDV Set */ - parameter[0] = 0x20; - ST7789H2_WriteReg(ST7789H2_VDV_SET, parameter, 1); - - /* Frame Rate Control in normal mode */ - parameter[0] = 0x0F; - ST7789H2_WriteReg(ST7789H2_FR_CTRL, parameter, 1); - - /* Power Control */ - parameter[0] = 0xA4; - parameter[1] = 0xA1; - ST7789H2_WriteReg(ST7789H2_POWER_CTRL, parameter, 2); - - /*--------------- ST7789H2 Gamma setting ------------------------------------*/ - /* Positive Voltage Gamma Control */ - parameter[0] = 0xD0; - parameter[1] = 0x08; - parameter[2] = 0x11; - parameter[3] = 0x08; - parameter[4] = 0x0C; - parameter[5] = 0x15; - parameter[6] = 0x39; - parameter[7] = 0x33; - parameter[8] = 0x50; - parameter[9] = 0x36; - parameter[10] = 0x13; - parameter[11] = 0x14; - parameter[12] = 0x29; - parameter[13] = 0x2D; - ST7789H2_WriteReg(ST7789H2_PV_GAMMA_CTRL, parameter, 14); - - /* Negative Voltage Gamma Control */ - parameter[0] = 0xD0; - parameter[1] = 0x08; - parameter[2] = 0x10; - parameter[3] = 0x08; - parameter[4] = 0x06; - parameter[5] = 0x06; - parameter[6] = 0x39; - parameter[7] = 0x44; - parameter[8] = 0x51; - parameter[9] = 0x0B; - parameter[10] = 0x16; - parameter[11] = 0x14; - parameter[12] = 0x2F; - parameter[13] = 0x31; - ST7789H2_WriteReg(ST7789H2_NV_GAMMA_CTRL, parameter, 14); - - /* Display ON command */ - ST7789H2_DisplayOn(); - - /* Tearing Effect Line On: Option (00h:VSYNC Interface OFF, 01h:VSYNC Interface ON) */ - parameter[0] = 0x00; - ST7789H2_WriteReg(ST7789H2_TEARING_EFFECT, parameter, 1); - -} - -/** - * @brief Set the Display Orientation. - * @param orientation: ST7789H2_ORIENTATION_PORTRAIT, ST7789H2_ORIENTATION_LANDSCAPE - * or ST7789H2_ORIENTATION_LANDSCAPE_ROT180 - * @retval None - */ -void ST7789H2_SetOrientation(uint32_t orientation) -{ - uint8_t parameter[6]; - - if(orientation == ST7789H2_ORIENTATION_LANDSCAPE) - { - parameter[0] = 0x00; - } - else if(orientation == ST7789H2_ORIENTATION_LANDSCAPE_ROT180) - { - /* Vertical Scrolling Definition */ - /* TFA describes the Top Fixed Area */ - parameter[0] = 0x00; - parameter[1] = 0x00; - /* VSA describes the height of the Vertical Scrolling Area */ - parameter[2] = 0x01; - parameter[3] = 0xF0; - /* BFA describes the Bottom Fixed Area */ - parameter[4] = 0x00; - parameter[5] = 0x00; - ST7789H2_WriteReg(ST7789H2_VSCRDEF, parameter, 6); - - /* Vertical Scroll Start Address of RAM */ - /* GRAM row nbr (320) - Display row nbr (240) = 80 = 0x50 */ - parameter[0] = 0x00; - parameter[1] = 0x50; - ST7789H2_WriteReg(ST7789H2_VSCSAD, parameter, 2); - - parameter[0] = 0xC0; - } - else - { - parameter[0] = 0x60; - } - ST7789H2_WriteReg(ST7789H2_NORMAL_DISPLAY, parameter, 1); -} - -/** - * @brief Enables the Display. - * @param None - * @retval None - */ -void ST7789H2_DisplayOn(void) -{ - /* Display ON command */ - ST7789H2_WriteReg(ST7789H2_DISPLAY_ON, (uint8_t*)NULL, 0); - - /* Sleep Out command */ - ST7789H2_WriteReg(ST7789H2_SLEEP_OUT, (uint8_t*)NULL, 0); -} - -/** - * @brief Disables the Display. - * @param None - * @retval None - */ -void ST7789H2_DisplayOff(void) -{ - uint8_t parameter[1]; - parameter[0] = 0xFE; - /* Display OFF command */ - ST7789H2_WriteReg(ST7789H2_DISPLAY_OFF, parameter, 1); - /* Sleep In Command */ - ST7789H2_WriteReg(ST7789H2_SLEEP_IN, (uint8_t*)NULL, 0); - /* Wait for 10ms */ - LCD_IO_Delay(10); -} - -/** - * @brief Get the LCD pixel Width. - * @param None - * @retval The Lcd Pixel Width - */ -uint16_t ST7789H2_GetLcdPixelWidth(void) -{ - return (uint16_t)ST7789H2_LCD_PIXEL_WIDTH; -} - -/** - * @brief Get the LCD pixel Height. - * @param None - * @retval The Lcd Pixel Height - */ -uint16_t ST7789H2_GetLcdPixelHeight(void) -{ - return (uint16_t)ST7789H2_LCD_PIXEL_HEIGHT; -} - -/** - * @brief Get the st7789h2 ID. - * @param None - * @retval The st7789h2 ID - */ -uint16_t ST7789H2_ReadID(void) -{ - LCD_IO_Init(); - - return ST7789H2_ReadReg(ST7789H2_LCD_ID); -} - -/** - * @brief Set Cursor position. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval None - */ -void ST7789H2_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - uint8_t parameter[4]; - /* CASET: Comumn Addrses Set */ - parameter[0] = 0x00; - parameter[1] = 0x00 + Xpos; - parameter[2] = 0x00; - parameter[3] = 0xEF + Xpos; - ST7789H2_WriteReg(ST7789H2_CASET, parameter, 4); - /* RASET: Row Addrses Set */ - parameter[0] = 0x00; - parameter[1] = 0x00 + Ypos; - parameter[2] = 0x00; - parameter[3] = 0xEF + Ypos; - ST7789H2_WriteReg(ST7789H2_RASET, parameter, 4); -} - -/** - * @brief Write pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @param RGBCode: the RGB pixel color in RGB565 format - * @retval None - */ -void ST7789H2_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode) -{ - /* Set Cursor */ - ST7789H2_SetCursor(Xpos, Ypos); - - /* Prepare to write to LCD RAM */ - ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - /* Write RAM data */ - LCD_IO_WriteData(RGBCode); -} - -/** - * @brief Read pixel. - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval The RGB pixel color in RGB565 format - */ -uint16_t ST7789H2_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - ST7789H2_Rgb888 rgb888; - uint8_t r, g, b; - uint16_t rgb565; - - /* Set Cursor */ - ST7789H2_SetCursor(Xpos, Ypos); - - /* Read RGB888 data from LCD RAM */ - rgb888 = ST7789H2_ReadPixel_rgb888(Xpos, Ypos); - - /* Convert RGB888 to RGB565 */ - r = ((rgb888.red & 0xF8) >> 3); /* Extract the red component 5 most significant bits */ - g = ((rgb888.green & 0xFC) >> 2); /* Extract the green component 6 most significant bits */ - b = ((rgb888.blue & 0xF8) >> 3); /* Extract the blue component 5 most significant bits */ - - rgb565 = ((uint16_t)(r) << 11) + ((uint16_t)(g) << 5) + ((uint16_t)(b) << 0); - - return (rgb565); -} - -/** - * @brief Writes to the selected LCD register. - * @param Command: command value (or register address as named in st7789h2 doc). - * @param Parameters: pointer on parameters value (if command uses one or several parameters). - * @param NbParameters: number of command parameters (0 if no parameter) - * @retval None - */ -void ST7789H2_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters) -{ - uint8_t i; - - /* Send command */ - LCD_IO_WriteReg(Command); - - /* Send command's parameters if any */ - for (i=0; i Ypos; posY--) /* In BMP files the line order is inverted */ - { - /* Set Cursor */ - ST7789H2_SetCursor(Xpos, posY - 1); - - /* Draw one line of the picture */ - ST7789H2_DrawRGBHLine(Xpos, posY - 1, Xsize, (pbmp + (nb_line * Xsize * 2))); - nb_line++; - } -} - -/** - * @brief Displays picture. - * @param pdata: picture address. - * @param Xpos: Image X position in the LCD - * @param Ypos: Image Y position in the LCD - * @param Xsize: Image X size in the LCD - * @param Ysize: Image Y size in the LCD - * @retval None - */ -void ST7789H2_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - uint32_t posY; - uint32_t nb_line = 0; - - for (posY = Ypos; posY < (Ypos + Ysize); posY ++) - { - /* Set Cursor */ - ST7789H2_SetCursor(Xpos, posY); - - /* Draw one line of the picture */ - ST7789H2_DrawRGBHLine(Xpos, posY, Xsize, (pdata + (nb_line * Xsize * 2))); - nb_line++; - } -} - - -/****************************************************************************** - Static Functions -*******************************************************************************/ - -/** - * @brief Read pixel from LCD RAM in RGB888 format - * @param Xpos: specifies the X position. - * @param Ypos: specifies the Y position. - * @retval Each RGB pixel color components in a structure - */ -static ST7789H2_Rgb888 ST7789H2_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos) -{ - ST7789H2_Rgb888 rgb888; - uint16_t rgb888_part1, rgb888_part2; - - /* In LCD RAM, pixels are 24 bits packed and read with 16 bits access - * Here is the pixels components arrangement in memory : - * bits: 15 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00 - * address 0 : red pixel 0 X X | green pixel 0 X X - * address 1 : blue pixel 0 X X | red pixel 1 X X - * address 2 : green pixel 1 X X | blue pixel 1 X X - */ - - /* Set Cursor */ - ST7789H2_SetCursor(Xpos, Ypos); - /* Prepare to read LCD RAM */ - ST7789H2_WriteReg(ST7789H2_READ_RAM, (uint8_t*)NULL, 0); /* RAM read data command */ - /* Dummy read */ - LCD_IO_ReadData(); - /* Read first part of the RGB888 data */ - rgb888_part1 = LCD_IO_ReadData(); - /* Read first part of the RGB888 data */ - rgb888_part2 = LCD_IO_ReadData(); - - /* red component */ - rgb888.red = (rgb888_part1 & 0xFC00) >> 8; - /* green component */ - rgb888.green = (rgb888_part1 & 0x00FC) >> 0; - /* blue component */ - rgb888.blue = (rgb888_part2 & 0xFC00) >> 8; - - return rgb888; -} - - -/** - * @brief Displays a single picture line. - * @param pdata: picture address. - * @param Xpos: Image X position in the LCD - * @param Ypos: Image Y position in the LCD - * @param Xsize: Image X size in the LCD - * @retval None - */ -static void ST7789H2_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata) -{ - uint32_t i = 0; - uint32_t posX; - uint16_t *rgb565 = (uint16_t*)pdata; - - /* Prepare to write to LCD RAM */ - ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */ - - for (posX = Xpos; posX < (Xsize + Xpos); posX++) - { - if ((posX >= WindowsXstart) && (Ypos >= WindowsYstart) && /* Check we are in the defined window */ - (posX <= WindowsXend) && (Ypos <= WindowsYend)) - { - if (posX != (Xsize + Xpos)) /* When writing last pixel when size is odd, the third part is not written */ - { - LCD_IO_WriteData(rgb565[i]); - } - i++; - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/st7789h2/st7789h2.h b/Drivers/BSP/Components/st7789h2/st7789h2.h deleted file mode 100644 index f5d3bf1288..0000000000 --- a/Drivers/BSP/Components/st7789h2/st7789h2.h +++ /dev/null @@ -1,169 +0,0 @@ -/** - ****************************************************************************** - * @file st7789h2.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the st7789h2.c - * driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __ST7789H2_H -#define __ST7789H2_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include -#include "../Common/lcd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup ST7789H2 - * @{ - */ - -/** @defgroup ST7789H2_Exported_Types ST7789H2 Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup ST7789H2_Exported_Constants ST7789H2 Exported Constants - * @{ - */ -/** - * @brief ST7789H2 ID - */ -#define ST7789H2_ID 0x85 - -/** - * @brief ST7789H2 Size - */ -#define ST7789H2_LCD_PIXEL_WIDTH ((uint16_t)240) -#define ST7789H2_LCD_PIXEL_HEIGHT ((uint16_t)240) - -/** - * @brief LCD_OrientationTypeDef - * Possible values of Display Orientation - */ -#define ST7789H2_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */ -#define ST7789H2_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */ -#define ST7789H2_ORIENTATION_LANDSCAPE_ROT180 ((uint32_t)0x02) /* Landscape rotated 180° orientation choice of LCD screen */ - -/** - * @brief ST7789H2 Registers - */ -#define ST7789H2_LCD_ID 0x04 -#define ST7789H2_SLEEP_IN 0x10 -#define ST7789H2_SLEEP_OUT 0x11 -#define ST7789H2_PARTIAL_DISPLAY 0x12 -#define ST7789H2_DISPLAY_INVERSION 0x21 -#define ST7789H2_DISPLAY_ON 0x29 -#define ST7789H2_WRITE_RAM 0x2C -#define ST7789H2_READ_RAM 0x2E -#define ST7789H2_CASET 0x2A -#define ST7789H2_RASET 0x2B -#define ST7789H2_VSCRDEF 0x33 /* Vertical Scroll Definition */ -#define ST7789H2_VSCSAD 0x37 /* Vertical Scroll Start Address of RAM */ -#define ST7789H2_TEARING_EFFECT 0x35 -#define ST7789H2_NORMAL_DISPLAY 0x36 -#define ST7789H2_IDLE_MODE_OFF 0x38 -#define ST7789H2_IDLE_MODE_ON 0x39 -#define ST7789H2_COLOR_MODE 0x3A -#define ST7789H2_WRCABCMB 0x5E /* Write Content Adaptive Brightness Control */ -#define ST7789H2_RDCABCMB 0x5F /* Read Content Adaptive Brightness Control */ -#define ST7789H2_PORCH_CTRL 0xB2 -#define ST7789H2_GATE_CTRL 0xB7 -#define ST7789H2_VCOM_SET 0xBB -#define ST7789H2_DISPLAY_OFF 0xBD -#define ST7789H2_LCM_CTRL 0xC0 -#define ST7789H2_VDV_VRH_EN 0xC2 -#define ST7789H2_VDV_SET 0xC4 -#define ST7789H2_VCOMH_OFFSET_SET 0xC5 -#define ST7789H2_FR_CTRL 0xC6 -#define ST7789H2_POWER_CTRL 0xD0 -#define ST7789H2_PV_GAMMA_CTRL 0xE0 -#define ST7789H2_NV_GAMMA_CTRL 0xE1 - -/** - * @} - */ - -/** @defgroup ST7789H2_Exported_Functions ST7789H2 Exported Functions - * @{ - */ -void ST7789H2_Init(void); -void ST7789H2_SetOrientation(uint32_t orientation); -uint16_t ST7789H2_ReadID(void); -void ST7789H2_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters); -uint8_t ST7789H2_ReadReg(uint8_t Command); - -void ST7789H2_DisplayOn(void); -void ST7789H2_DisplayOff(void); -void ST7789H2_SetCursor(uint16_t Xpos, uint16_t Ypos); -void ST7789H2_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode); -uint16_t ST7789H2_ReadPixel(uint16_t Xpos, uint16_t Ypos); - -void ST7789H2_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ST7789H2_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void ST7789H2_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void ST7789H2_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata); - -void ST7789H2_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); - - -uint16_t ST7789H2_GetLcdPixelWidth(void); -uint16_t ST7789H2_GetLcdPixelHeight(void); - -/* LCD driver structure */ -extern LCD_DrvTypeDef ST7789H2_drv; - -/* LCD IO functions */ -extern void LCD_IO_Init(void); -extern void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size); -extern void LCD_IO_WriteReg(uint8_t Reg); -extern void LCD_IO_WriteData(uint16_t RegValue); -extern uint16_t LCD_IO_ReadData(void); -extern void LCD_IO_Delay(uint32_t delay); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __ST7789H2_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/stmpe1600 b/Drivers/BSP/Components/stmpe1600 new file mode 160000 index 0000000000..a811b5a2de --- /dev/null +++ b/Drivers/BSP/Components/stmpe1600 @@ -0,0 +1 @@ +Subproject commit a811b5a2de59082c83fb2f34b8d17dd17b9d4ed0 diff --git a/Drivers/BSP/Components/stmpe1600/LICENSE.md b/Drivers/BSP/Components/stmpe1600/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/stmpe1600/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/stmpe1600/Release_Notes.html b/Drivers/BSP/Components/stmpe1600/Release_Notes.html deleted file mode 100644 index dc9b40ee0b..0000000000 --- a/Drivers/BSP/Components/stmpe1600/Release_Notes.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - Release Notes for STMPE1600 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

STMPE1600 Component Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the STMPE1600 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update IO_Pin parameter to uint32_t in all IO functionalities functions
  • -
  • This version is to be used with Common V2.0.0 version
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stmpe1600.h: change Ҡby “/†in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/stmpe1600/_htmresc/favicon.png b/Drivers/BSP/Components/stmpe1600/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/stmpe1600/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/stmpe1600/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/stmpe1600/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/stmpe1600/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/stmpe1600/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/stmpe1600/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/stmpe1600/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/stmpe1600/stmpe1600.c b/Drivers/BSP/Components/stmpe1600/stmpe1600.c deleted file mode 100644 index 2c56258639..0000000000 --- a/Drivers/BSP/Components/stmpe1600/stmpe1600.c +++ /dev/null @@ -1,584 +0,0 @@ -/** - ****************************************************************************** - * @file stmpe1600.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the STMPE1600 - * IO Expander devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stmpe1600.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup STMPE1600 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup STMPE1600_Private_Types_Definitions - * @{ - */ - -/* Private define ------------------------------------------------------------*/ - -/** @defgroup STMPE1600_Private_Defines - * @{ - */ -#define STMPE1600_MAX_INSTANCE 2 - -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup STMPE1600_Private_Macros - * @{ - */ - -/* Private variables ---------------------------------------------------------*/ -static uint16_t tmp = 0; - -/** @defgroup STMPE1600_Private_Variables - * @{ - */ -/* IO driver structure initialization */ -IO_DrvTypeDef stmpe1600_io_drv = -{ - stmpe1600_Init, - stmpe1600_ReadID, - stmpe1600_Reset, - stmpe1600_Start, - stmpe1600_IO_Config, - stmpe1600_IO_WritePin, - stmpe1600_IO_ReadPin, - 0, - 0, - stmpe1600_IO_ITStatus, - stmpe1600_IO_ClearIT, -}; - -uint8_t stmpe1600[STMPE1600_MAX_INSTANCE] = {0}; -/** - * @} - */ - -/* Private function prototypes -----------------------------------------------*/ - -/** @defgroup STMPE1600_Private_Function_Prototypes - * @{ - */ -static uint8_t stmpe1600_GetInstance(uint16_t DeviceAddr); - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup STMPE1600_Private_Functions - * @{ - */ - -/** - * @brief Initialize the stmpe1600 and configure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe1600_Init(uint16_t DeviceAddr) -{ - uint8_t instance; - uint8_t empty; - - /* Check if device instance already exists */ - instance = stmpe1600_GetInstance(DeviceAddr); - - if(instance == 0xFF) - { - /* Look for empty instance */ - empty = stmpe1600_GetInstance(0); - - if(empty < STMPE1600_MAX_INSTANCE) - { - /* Register the current device instance */ - stmpe1600[empty] = DeviceAddr; - - /* Initialize IO BUS layer */ - IOE_Init(); - - /* Generate stmpe1600 Software reset */ - stmpe1600_Reset(DeviceAddr); - } - } -} - -/** - * @brief Configures the touch Screen Controller (Single point detection) - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void stmpe1600_Start(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - /*Configuration already done during the initialization */ -} - -/** - * @brief Reset the stmpe1600 by Software. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe1600_Reset(uint16_t DeviceAddr) -{ - /* Power Down the stmpe1600 */ - IOE_Write(DeviceAddr, STMPE1600_REG_SYS_CTRL, (uint16_t)0x80); - - /* Wait for a delay to ensure registers erasing */ - IOE_Delay(2); - - /* Power On the Codec after the power off: all registers are reinitialized */ - IOE_Write(DeviceAddr, STMPE1600_REG_SYS_CTRL, (uint16_t)0x00); - - /* Wait for a delay to ensure registers erasing */ - IOE_Delay(2); -} - -/** - * @brief Read the stmpe1600 device ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device ID (two bytes). - */ -uint16_t stmpe1600_ReadID(uint16_t DeviceAddr) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Initialize IO BUS layer */ - IOE_Init(); - - /* Read the stmpe1600 device ID */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_CHP_ID, tmpData, 2); - - /* Return the device ID value */ - return((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); -} - -/** - * @brief Set the global interrupt Polarity. - * @param DeviceAddr: Device address on communication Bus. - * @param Polarity: could be one of these values; - * @arg STMPE1600_POLARITY_LOW: Interrupt line is active Low/Falling edge - * @arg STMPE1600_POLARITY_HIGH: Interrupt line is active High/Rising edge - * @retval None - */ -void stmpe1600_SetITPolarity(uint16_t DeviceAddr, uint8_t Polarity) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = IOE_Read(DeviceAddr, STMPE1600_REG_SYS_CTRL); - - /* Mask the polarity bit */ - tmp &= ~(uint16_t)0x01; - - /* Set the Interrupt Output line polarity */ - tmp |= (uint8_t)Polarity; - - /* Set the new register value */ - IOE_Write(DeviceAddr, STMPE1600_REG_SYS_CTRL, tmp); -} - -/** - * @brief Enable the Global interrupt. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe1600_EnableGlobalIT(uint16_t DeviceAddr) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Configure NVIC IT for IOE */ - IOE_ITConfig(); - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_SYS_CTRL, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Set the global interrupts to be Enabled */ - tmp |= (uint16_t)STMPE1600_IT_ENABLE; - - /* Write Back the Interrupt Control register */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_SYS_CTRL, (uint8_t *)&tmp, 2); -} - -/** - * @brief Disable the Global interrupt. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe1600_DisableGlobalIT(uint16_t DeviceAddr) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_SYS_CTRL, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Set the global interrupts to be Enabled */ - tmp &= ~(uint16_t)STMPE1600_IT_ENABLE; - - /* Write Back the Interrupt Control register */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_SYS_CTRL, (uint8_t *)&tmp, 2); -} - -/** - * @brief Initialize the selected pin(s) direction. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @param Direction: could be STMPE1600_DIRECTION_IN or STMPE1600_DIRECTION_OUT. - * @retval None - */ -void stmpe1600_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_GPDR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Set the Pin direction */ - if (Direction != STMPE1600_DIRECTION_IN) - { - tmp |= (uint16_t)IO_Pin; - } - else - { - tmp &= ~(uint16_t)IO_Pin; - } - - /* Set the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_GPDR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Configure the IO pin(s) according to IO mode structure value. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 7. - * @param IO_Mode: The IO pin mode to configure, could be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @retval 0 if no error, IO_Mode if error - */ -uint8_t stmpe1600_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - uint8_t error_code = 0; - uint8_t buffer[2] = {0,0}; - - /* Configure IO pin according to selected IO mode */ - switch(IO_Mode) - { - case IO_MODE_INPUT: /* Input mode */ - stmpe1600_IO_DisablePinIT(DeviceAddr, IO_Pin); - stmpe1600_IO_InitPin(DeviceAddr, IO_Pin, STMPE1600_DIRECTION_IN); - break; - - case IO_MODE_OUTPUT: /* Output mode */ - stmpe1600_IO_DisablePinIT(DeviceAddr, IO_Pin); - stmpe1600_IO_InitPin(DeviceAddr, IO_Pin, STMPE1600_DIRECTION_OUT); - break; - - case IO_MODE_IT_RISING_EDGE: /* Interrupt rising edge mode */ - stmpe1600_SetITPolarity(DeviceAddr, STMPE1600_POLARITY_HIGH); - stmpe1600_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe1600_IO_InitPin(DeviceAddr, IO_Pin, STMPE1600_DIRECTION_IN); - /* Clear all IO IT pending bits if any */ - stmpe1600_IO_ClearIT(DeviceAddr, IO_Pin); - - /* Read GMPR to enable interrupt */ - IOE_ReadMultiple(DeviceAddr , STMPE1600_REG_GPMR, buffer, 2); - break; - - case IO_MODE_IT_FALLING_EDGE: /* Interrupt falling edge mode */ - stmpe1600_SetITPolarity(DeviceAddr, STMPE1600_POLARITY_LOW); - stmpe1600_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe1600_IO_InitPin(DeviceAddr, IO_Pin, STMPE1600_DIRECTION_IN); - - /* Clear all IO IT pending bits if any */ - stmpe1600_IO_ClearIT(DeviceAddr, IO_Pin); - - /* Read GMPR to enable interrupt */ - IOE_ReadMultiple(DeviceAddr , STMPE1600_REG_GPMR, buffer, 2); - break; - - default: - error_code = (uint8_t) IO_Mode; - break; - } - return error_code; -} - -/** - * @brief Enable polarity inversion of the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval None - */ -void stmpe1600_IO_PolarityInv_Enable(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_GPPIR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Enable pin polarity inversion */ - tmp |= (uint16_t)IO_Pin; - - /* Set the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_GPPIR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Disable polarity inversion of the selected IO pins. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval None - */ -void stmpe1600_IO_PolarityInv_Disable(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_GPPIR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Disable pin polarity inversion */ - tmp &= ~ (uint16_t)IO_Pin; - - /* Set the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_GPPIR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Set the value of the selected IO pins. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be set. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @param PinState: The value to be set. - * @retval None - */ -void stmpe1600_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_GPMR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Set the pin state */ - if(PinState != 0) - { - tmp |= (uint16_t)IO_Pin; - } - else - { - tmp &= ~(uint16_t)IO_Pin; - } - - /* Set the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_GPSR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Read the state of the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be read. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval State of the selected IO pin(s). - */ -uint32_t stmpe1600_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_GPMR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Return the pin(s) state */ - return(tmp & IO_Pin); -} - -/** - * @brief Enable the interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval None - */ -void stmpe1600_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Enable global interrupt */ - stmpe1600_EnableGlobalIT(DeviceAddr); - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_IEGPIOR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Put pin in IT mode */ - tmp |= (uint16_t)IO_Pin; - - /* Write the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_IEGPIOR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Disable the interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval None - */ -void stmpe1600_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the current register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_IEGPIOR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Disable the IT pin mode */ - tmp &= ~(uint16_t)IO_Pin; - - /* Set the new register value */ - IOE_WriteMultiple(DeviceAddr, STMPE1600_REG_IEGPIOR, (uint8_t *)&tmp, 2); -} - -/** - * @brief Read the IT status of the selected IO pin(s) - * (clears all the pending bits if any). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be checked. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval IT Status of the selected IO pin(s). - */ -uint32_t stmpe1600_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_ISGPIOR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Return the pin IT status */ - return((tmp & IO_Pin) == IO_Pin); -} - -/** - * @brief Detect an IT pending bit from the selected IO pin(s). - * (clears all the pending bits if any). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: IO pin(s) to be checked. - * This parameter could be any combination of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @retval IT pending bit detection status. - */ -uint8_t stmpe1600_IO_ReadIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the register value */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_ISGPIOR, tmpData, 2); - - tmp = ((uint16_t)tmpData[0] | (((uint16_t)tmpData[1]) << 8)); - - /* Return if there is an IT pending bit or not */ - return(tmp & IO_Pin); -} - -/** - * @brief Clear all the IT pending bits if any. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe1600_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmpData[2] = {0 , 0}; - - /* Get the register value to clear all pending bits */ - IOE_ReadMultiple(DeviceAddr, STMPE1600_REG_ISGPIOR, tmpData, 2); -} - -/** - * @brief Check if the device instance of the selected address is already registered - * and return its index - * @param DeviceAddr: Device address on communication Bus. - * @retval Index of the device instance if registered, 0xFF if not. - */ -static uint8_t stmpe1600_GetInstance(uint16_t DeviceAddr) -{ - uint8_t idx = 0; - - /* Check all the registered instances */ - for(idx = 0; idx < STMPE1600_MAX_INSTANCE ; idx ++) - { - /* Return index if there is address match */ - if(stmpe1600[idx] == DeviceAddr) - { - return idx; - } - } - - return 0xFF; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/stmpe1600/stmpe1600.h b/Drivers/BSP/Components/stmpe1600/stmpe1600.h deleted file mode 100644 index 3ea5a0ac6b..0000000000 --- a/Drivers/BSP/Components/stmpe1600/stmpe1600.h +++ /dev/null @@ -1,193 +0,0 @@ -/** - ****************************************************************************** - * @file stmpe1600.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stmpe1600.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STMPE1600_H -#define __STMPE1600_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup STMPE1600 - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** @defgroup STMPE1600_Exported_Types - * @{ - */ - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup STMPE1600_Exported_Constants - * @{ - */ - -/** - * @brief STMPE1600 chip IDs - */ -#define STMPE1600_ID 0x1600 - -/** - * @brief Interrupt enable - */ -#define STMPE1600_IT_ENABLE 0x04 - -/** - * @brief Identification registers & System Control - */ -#define STMPE1600_REG_CHP_ID 0x00 -#define STMPE1600_REG_ID_VERSION 0x02 -#define STMPE1600_REG_SYS_CTRL 0x03 - -/** - * @brief IO Registers - */ - -#define STMPE1600_REG_GPMR 0x10 -#define STMPE1600_REG_GPSR 0x12 -#define STMPE1600_REG_GPDR 0x14 -#define STMPE1600_REG_GPPIR 0x16 - -/** - * @brief Interrupt Control registers - */ -#define STMPE1600_REG_IEGPIOR 0x08 -#define STMPE1600_REG_ISGPIOR 0x0A - -/** - * @brief IO Pins direction - */ -#define STMPE1600_DIRECTION_IN 0x00 -#define STMPE1600_DIRECTION_OUT 0x01 - -/** - * @brief IO IT polarity - */ -#define STMPE1600_POLARITY_LOW 0x00 -#define STMPE1600_POLARITY_HIGH 0x01 - -/** - * @brief IO Pins - */ -#define STMPE1600_PIN_0 0x0001 -#define STMPE1600_PIN_1 0x0002 -#define STMPE1600_PIN_2 0x0004 -#define STMPE1600_PIN_3 0x0008 -#define STMPE1600_PIN_4 0x0010 -#define STMPE1600_PIN_5 0x0020 -#define STMPE1600_PIN_6 0x0040 -#define STMPE1600_PIN_7 0x0080 -#define STMPE1600_PIN_8 0x0100 -#define STMPE1600_PIN_9 0x0200 -#define STMPE1600_PIN_10 0x0400 -#define STMPE1600_PIN_11 0x0800 -#define STMPE1600_PIN_12 0x1000 -#define STMPE1600_PIN_13 0x2000 -#define STMPE1600_PIN_14 0x4000 -#define STMPE1600_PIN_15 0x8000 -#define STMPE1600_PIN_ALL 0xFFFF - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup STMPE1600_Exported_Macros - * @{ - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup STMPE1600_Exported_Functions - * @{ - */ - -/** - * @brief STMPE1600 Control functions - */ -void stmpe1600_Init(uint16_t DeviceAddr); -void stmpe1600_Reset(uint16_t DeviceAddr); -uint16_t stmpe1600_ReadID(uint16_t DeviceAddr); -void stmpe1600_SetITPolarity(uint16_t DeviceAddr, uint8_t Polarity); -void stmpe1600_EnableGlobalIT(uint16_t DeviceAddr); -void stmpe1600_DisableGlobalIT(uint16_t DeviceAddr); - -/** - * @brief STMPE1600 IO functionalities functions - */ -void stmpe1600_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction); -uint8_t stmpe1600_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode); -void stmpe1600_IO_PolarityInv_Enable(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_IO_PolarityInv_Disable(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState); -uint32_t stmpe1600_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); -uint32_t stmpe1600_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin); -uint8_t stmpe1600_IO_ReadIT(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe1600_Start(uint16_t DeviceAddr, uint32_t IO_Pin); - -void IOE_Init(void); -void IOE_ITConfig (void); -void IOE_Delay(uint32_t delay); -void IOE_Write(uint8_t addr, uint8_t reg, uint8_t value); -uint8_t IOE_Read(uint8_t addr, uint8_t reg); -uint16_t IOE_ReadMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); -void IOE_WriteMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); - -/* STMPE1600 driver structure */ -extern IO_DrvTypeDef stmpe1600_io_drv; - - -#ifdef __cplusplus -} -#endif -#endif /* __STMPE1600_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/stmpe811 b/Drivers/BSP/Components/stmpe811 new file mode 160000 index 0000000000..9ef6302330 --- /dev/null +++ b/Drivers/BSP/Components/stmpe811 @@ -0,0 +1 @@ +Subproject commit 9ef6302330ad54468210bbb8e2e9b502c9558bb8 diff --git a/Drivers/BSP/Components/stmpe811/LICENSE.md b/Drivers/BSP/Components/stmpe811/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/stmpe811/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/stmpe811/Release_Notes.html b/Drivers/BSP/Components/stmpe811/Release_Notes.html deleted file mode 100644 index 956f994338..0000000000 --- a/Drivers/BSP/Components/stmpe811/Release_Notes.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - Release Notes for STMPE811 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

STMPE811 Component Drivers

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the STMPE811 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All functions: update IO_Pin parameter to uint32_t instead of uint16_t
  • -
  • Add a return valud for stmpe811_IO_Config() function
  • -
-

Important Note
-This new version V2.0.0 breaks the compatibility with V1.0.2, and it needs to be used with STM32Cube BSP Common V2.0.0.

-
-
-
- -
-

Main Changes

-
    -
  • stmpe811.h: change Ҡby “/†in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Fix limitation related to the selection of alternate function for TS physical IO
  • -
  • Fix wrong pins definition of the TS
  • -
  • Swap implementation of stmpe811_IO_EnableAF() and stmpe811_IO_DisableAF() functions
  • -
  • Miscellaneous code cleanup of comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/stmpe811/_htmresc/favicon.png b/Drivers/BSP/Components/stmpe811/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/stmpe811/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/stmpe811/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/stmpe811/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/stmpe811/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/stmpe811/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/stmpe811/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/stmpe811/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/stmpe811/stmpe811.c b/Drivers/BSP/Components/stmpe811/stmpe811.c deleted file mode 100644 index e82e8cc8a3..0000000000 --- a/Drivers/BSP/Components/stmpe811/stmpe811.c +++ /dev/null @@ -1,956 +0,0 @@ -/** - ****************************************************************************** - * @file stmpe811.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the STMPE811 - * IO Expander devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stmpe811.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup STMPE811 - * @{ - */ - -/** @defgroup STMPE811_Private_Types_Definitions - * @{ - */ - -/** @defgroup STMPE811_Private_Defines - * @{ - */ -#define STMPE811_MAX_INSTANCE 2 -/** - * @} - */ - -/** @defgroup STMPE811_Private_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STMPE811_Private_Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef stmpe811_ts_drv = -{ - stmpe811_Init, - stmpe811_ReadID, - stmpe811_Reset, - stmpe811_TS_Start, - stmpe811_TS_DetectTouch, - stmpe811_TS_GetXY, - stmpe811_TS_EnableIT, - stmpe811_TS_ClearIT, - stmpe811_TS_ITStatus, - stmpe811_TS_DisableIT, -}; - -/* IO driver structure initialization */ -IO_DrvTypeDef stmpe811_io_drv = -{ - stmpe811_Init, - stmpe811_ReadID, - stmpe811_Reset, - stmpe811_IO_Start, - stmpe811_IO_Config, - stmpe811_IO_WritePin, - stmpe811_IO_ReadPin, - stmpe811_IO_EnableIT, - stmpe811_IO_DisableIT, - stmpe811_IO_ITStatus, - stmpe811_IO_ClearIT, -}; - -/* stmpe811 instances by address */ -uint8_t stmpe811[STMPE811_MAX_INSTANCE] = {0}; -/** - * @} - */ - -/** @defgroup STMPE811_Private_Function_Prototypes - * @{ - */ -static uint8_t stmpe811_GetInstance(uint16_t DeviceAddr); -/** - * @} - */ - -/** @defgroup STMPE811_Private_Functions - * @{ - */ - -/** - * @brief Initialize the stmpe811 and configure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_Init(uint16_t DeviceAddr) -{ - uint8_t instance; - uint8_t empty; - - /* Check if device instance already exists */ - instance = stmpe811_GetInstance(DeviceAddr); - - /* To prevent double initialization */ - if(instance == 0xFF) - { - /* Look for empty instance */ - empty = stmpe811_GetInstance(0); - - if(empty < STMPE811_MAX_INSTANCE) - { - /* Register the current device instance */ - stmpe811[empty] = DeviceAddr; - - /* Initialize IO BUS layer */ - IOE_Init(); - - /* Generate stmpe811 Software reset */ - stmpe811_Reset(DeviceAddr); - } - } -} - -/** - * @brief Reset the stmpe811 by Software. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_Reset(uint16_t DeviceAddr) -{ - /* Power Down the stmpe811 */ - IOE_Write(DeviceAddr, STMPE811_REG_SYS_CTRL1, 2); - - /* Wait for a delay to ensure registers erasing */ - IOE_Delay(10); - - /* Power On the Codec after the power off => all registers are reinitialized */ - IOE_Write(DeviceAddr, STMPE811_REG_SYS_CTRL1, 0); - - /* Wait for a delay to ensure registers erasing */ - IOE_Delay(2); -} - -/** - * @brief Read the stmpe811 IO Expander device ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device ID (two bytes). - */ -uint16_t stmpe811_ReadID(uint16_t DeviceAddr) -{ - /* Initialize IO BUS layer */ - IOE_Init(); - - /* Return the device ID value */ - return ((IOE_Read(DeviceAddr, STMPE811_REG_CHP_ID_LSB) << 8) |\ - (IOE_Read(DeviceAddr, STMPE811_REG_CHP_ID_MSB))); -} - -/** - * @brief Enable the Global interrupt. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_EnableGlobalIT(uint16_t DeviceAddr) -{ - uint8_t tmp = 0; - - /* Read the Interrupt Control register */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_CTRL); - - /* Set the global interrupts to be Enabled */ - tmp |= (uint8_t)STMPE811_GIT_EN; - - /* Write Back the Interrupt Control register */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_CTRL, tmp); -} - -/** - * @brief Disable the Global interrupt. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_DisableGlobalIT(uint16_t DeviceAddr) -{ - uint8_t tmp = 0; - - /* Read the Interrupt Control register */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_CTRL); - - /* Set the global interrupts to be Disabled */ - tmp &= ~(uint8_t)STMPE811_GIT_EN; - - /* Write Back the Interrupt Control register */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_CTRL, tmp); - -} - -/** - * @brief Enable the interrupt mode for the selected IT source - * @param DeviceAddr: Device address on communication Bus. - * @param Source: The interrupt source to be configured, could be: - * @arg STMPE811_GIT_IO: IO interrupt - * @arg STMPE811_GIT_ADC : ADC interrupt - * @arg STMPE811_GIT_FE : Touch Screen Controller FIFO Error interrupt - * @arg STMPE811_GIT_FF : Touch Screen Controller FIFO Full interrupt - * @arg STMPE811_GIT_FOV : Touch Screen Controller FIFO Overrun interrupt - * @arg STMPE811_GIT_FTH : Touch Screen Controller FIFO Threshold interrupt - * @arg STMPE811_GIT_TOUCH : Touch Screen Controller Touch Detected interrupt - * @retval None - */ -void stmpe811_EnableITSource(uint16_t DeviceAddr, uint8_t Source) -{ - uint8_t tmp = 0; - - /* Get the current value of the INT_EN register */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_EN); - - /* Set the interrupts to be Enabled */ - tmp |= Source; - - /* Set the register */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_EN, tmp); -} - -/** - * @brief Disable the interrupt mode for the selected IT source - * @param DeviceAddr: Device address on communication Bus. - * @param Source: The interrupt source to be configured, could be: - * @arg STMPE811_GIT_IO: IO interrupt - * @arg STMPE811_GIT_ADC : ADC interrupt - * @arg STMPE811_GIT_FE : Touch Screen Controller FIFO Error interrupt - * @arg STMPE811_GIT_FF : Touch Screen Controller FIFO Full interrupt - * @arg STMPE811_GIT_FOV : Touch Screen Controller FIFO Overrun interrupt - * @arg STMPE811_GIT_FTH : Touch Screen Controller FIFO Threshold interrupt - * @arg STMPE811_GIT_TOUCH : Touch Screen Controller Touch Detected interrupt - * @retval None - */ -void stmpe811_DisableITSource(uint16_t DeviceAddr, uint8_t Source) -{ - uint8_t tmp = 0; - - /* Get the current value of the INT_EN register */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_EN); - - /* Set the interrupts to be Enabled */ - tmp &= ~Source; - - /* Set the register */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_EN, tmp); -} - -/** - * @brief Set the global interrupt Polarity. - * @param DeviceAddr: Device address on communication Bus. - * @param Polarity: the IT mode polarity, could be one of the following values: - * @arg STMPE811_POLARITY_LOW: Interrupt line is active Low/Falling edge - * @arg STMPE811_POLARITY_HIGH: Interrupt line is active High/Rising edge - * @retval None - */ -void stmpe811_SetITPolarity(uint16_t DeviceAddr, uint8_t Polarity) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_CTRL); - - /* Mask the polarity bits */ - tmp &= ~(uint8_t)0x04; - - /* Modify the Interrupt Output line configuration */ - tmp |= Polarity; - - /* Set the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_CTRL, tmp); - -} - -/** - * @brief Set the global interrupt Type. - * @param DeviceAddr: Device address on communication Bus. - * @param Type: Interrupt line activity type, could be one of the following values: - * @arg STMPE811_TYPE_LEVEL: Interrupt line is active in level model - * @arg STMPE811_TYPE_EDGE: Interrupt line is active in edge model - * @retval None - */ -void stmpe811_SetITType(uint16_t DeviceAddr, uint8_t Type) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_INT_CTRL); - - /* Mask the type bits */ - tmp &= ~(uint8_t)0x02; - - /* Modify the Interrupt Output line configuration */ - tmp |= Type; - - /* Set the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_CTRL, tmp); - -} - -/** - * @brief Check the selected Global interrupt source pending bit - * @param DeviceAddr: Device address on communication Bus. - * @param Source: the Global interrupt source to be checked, could be: - * @arg STMPE811_GIT_IO: IO interrupt - * @arg STMPE811_GIT_ADC : ADC interrupt - * @arg STMPE811_GIT_FE : Touch Screen Controller FIFO Error interrupt - * @arg STMPE811_GIT_FF : Touch Screen Controller FIFO Full interrupt - * @arg STMPE811_GIT_FOV : Touch Screen Controller FIFO Overrun interrupt - * @arg STMPE811_GIT_FTH : Touch Screen Controller FIFO Threshold interrupt - * @arg STMPE811_GIT_TOUCH : Touch Screen Controller Touch Detected interrupt - * @retval The checked Global interrupt source status. - */ -uint8_t stmpe811_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source) -{ - /* Return the global IT source status */ - return((IOE_Read(DeviceAddr, STMPE811_REG_INT_STA) & Source) == Source); -} - -/** - * @brief Return the Global interrupts status - * @param DeviceAddr: Device address on communication Bus. - * @param Source: the Global interrupt source to be checked, could be: - * @arg STMPE811_GIT_IO: IO interrupt - * @arg STMPE811_GIT_ADC : ADC interrupt - * @arg STMPE811_GIT_FE : Touch Screen Controller FIFO Error interrupt - * @arg STMPE811_GIT_FF : Touch Screen Controller FIFO Full interrupt - * @arg STMPE811_GIT_FOV : Touch Screen Controller FIFO Overrun interrupt - * @arg STMPE811_GIT_FTH : Touch Screen Controller FIFO Threshold interrupt - * @arg STMPE811_GIT_TOUCH : Touch Screen Controller Touch Detected interrupt - * @retval The checked Global interrupt source status. - */ -uint8_t stmpe811_ReadGITStatus(uint16_t DeviceAddr, uint8_t Source) -{ - /* Return the global IT source status */ - return((IOE_Read(DeviceAddr, STMPE811_REG_INT_STA) & Source)); -} - -/** - * @brief Clear the selected Global interrupt pending bit(s) - * @param DeviceAddr: Device address on communication Bus. - * @param Source: the Global interrupt source to be cleared, could be any combination - * of the following values: - * @arg STMPE811_GIT_IO: IO interrupt - * @arg STMPE811_GIT_ADC : ADC interrupt - * @arg STMPE811_GIT_FE : Touch Screen Controller FIFO Error interrupt - * @arg STMPE811_GIT_FF : Touch Screen Controller FIFO Full interrupt - * @arg STMPE811_GIT_FOV : Touch Screen Controller FIFO Overrun interrupt - * @arg STMPE811_GIT_FTH : Touch Screen Controller FIFO Threshold interrupt - * @arg STMPE811_GIT_TOUCH : Touch Screen Controller Touch Detected interrupt - * @retval None - */ -void stmpe811_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source) -{ - /* Write 1 to the bits that have to be cleared */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_STA, Source); -} - -/** - * @brief Start the IO functionality use and disable the AF for selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin(s) to put in AF. This parameter can be one - * of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t mode; - - /* Get the current register value */ - mode = IOE_Read(DeviceAddr, STMPE811_REG_SYS_CTRL2); - - /* Set the Functionalities to be Disabled */ - mode &= ~(STMPE811_IO_FCT | STMPE811_ADC_FCT); - - /* Write the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_SYS_CTRL2, mode); - - /* Disable AF for the selected IO pin(s) */ - stmpe811_IO_DisableAF(DeviceAddr, (uint8_t)IO_Pin); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @param IO_Mode: The IO pin mode to configure, could be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - * @retval 0 if no error, IO_Mode if error - */ -uint8_t stmpe811_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - uint8_t error_code = 0; - - /* Configure IO pin according to selected IO mode */ - switch(IO_Mode) - { - case IO_MODE_INPUT: /* Input mode */ - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_IN); - break; - - case IO_MODE_OUTPUT: /* Output mode */ - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_OUT); - break; - - case IO_MODE_IT_RISING_EDGE: /* Interrupt rising edge mode */ - stmpe811_IO_EnableIT(DeviceAddr); - stmpe811_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_IN); - stmpe811_SetITType(DeviceAddr, STMPE811_TYPE_EDGE); - stmpe811_IO_SetEdgeMode(DeviceAddr, IO_Pin, STMPE811_EDGE_RISING); - break; - - case IO_MODE_IT_FALLING_EDGE: /* Interrupt falling edge mode */ - stmpe811_IO_EnableIT(DeviceAddr); - stmpe811_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_IN); - stmpe811_SetITType(DeviceAddr, STMPE811_TYPE_EDGE); - stmpe811_IO_SetEdgeMode(DeviceAddr, IO_Pin, STMPE811_EDGE_FALLING); - break; - - case IO_MODE_IT_LOW_LEVEL: /* Low level interrupt mode */ - stmpe811_IO_EnableIT(DeviceAddr); - stmpe811_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_IN); - stmpe811_SetITType(DeviceAddr, STMPE811_TYPE_LEVEL); - stmpe811_SetITPolarity(DeviceAddr, STMPE811_POLARITY_LOW); - break; - - case IO_MODE_IT_HIGH_LEVEL: /* High level interrupt mode */ - stmpe811_IO_EnableIT(DeviceAddr); - stmpe811_IO_EnablePinIT(DeviceAddr, IO_Pin); - stmpe811_IO_InitPin(DeviceAddr, IO_Pin, STMPE811_DIRECTION_IN); - stmpe811_SetITType(DeviceAddr, STMPE811_TYPE_LEVEL); - stmpe811_SetITPolarity(DeviceAddr, STMPE811_POLARITY_HIGH); - break; - - default: - error_code = (uint8_t) IO_Mode; - break; - } - return error_code; -} - -/** - * @brief Initialize the selected IO pin direction. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: Where x can be from 0 to 7. - * @param Direction: could be STMPE811_DIRECTION_IN or STMPE811_DIRECTION_OUT. - * @retval None - */ -void stmpe811_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction) -{ - uint8_t tmp = 0; - - /* Get all the Pins direction */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_IO_DIR); - - /* Set the selected pin direction */ - if (Direction != STMPE811_DIRECTION_IN) - { - tmp |= (uint8_t)IO_Pin; - } - else - { - tmp &= ~(uint8_t)IO_Pin; - } - - /* Write the register new value */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_DIR, tmp); -} - -/** - * @brief Disable the AF for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: Where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_DisableAF(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmp = 0; - - /* Get the current state of the IO_AF register */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_IO_AF); - - /* Enable the selected pins alternate function */ - tmp |= (uint8_t)IO_Pin; - - /* Write back the new value in IO AF register */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_AF, tmp); - -} - -/** - * @brief Enable the AF for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: Where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_EnableAF(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmp = 0; - - /* Get the current register value */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_IO_AF); - - /* Enable the selected pins alternate function */ - tmp &= ~(uint8_t)IO_Pin; - - /* Write back the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_AF, tmp); -} - -/** - * @brief Configure the Edge for which a transition is detectable for the - * selected pin. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO pin to be configured. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: Where x can be from 0 to 7. - * @param Edge: The edge which will be detected. This parameter can be one or - * a combination of following values: STMPE811_EDGE_FALLING and STMPE811_EDGE_RISING . - * @retval None - */ -void stmpe811_IO_SetEdgeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Edge) -{ - uint8_t tmp1 = 0, tmp2 = 0; - - /* Get the current registers values */ - tmp1 = IOE_Read(DeviceAddr, STMPE811_REG_IO_FE); - tmp2 = IOE_Read(DeviceAddr, STMPE811_REG_IO_RE); - - /* Disable the Falling Edge */ - tmp1 &= ~(uint8_t)IO_Pin; - - /* Disable the Falling Edge */ - tmp2 &= ~(uint8_t)IO_Pin; - - /* Enable the Falling edge if selected */ - if (Edge & STMPE811_EDGE_FALLING) - { - tmp1 |= (uint8_t)IO_Pin; - } - - /* Enable the Rising edge if selected */ - if (Edge & STMPE811_EDGE_RISING) - { - tmp2 |= (uint8_t)IO_Pin; - } - - /* Write back the new registers values */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_FE, tmp1); - IOE_Write(DeviceAddr, STMPE811_REG_IO_RE, tmp2); -} - -/** - * @brief Write a new IO pin state. - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @param PinState: The new IO pin state. - * @retval None - */ -void stmpe811_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState) -{ - /* Apply the bit value to the selected pin */ - if (PinState != 0) - { - /* Set the register */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_SET_PIN, (uint8_t)IO_Pin); - } - else - { - /* Set the register */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_CLR_PIN, (uint8_t)IO_Pin); - } -} - -/** - * @brief Return the state of the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The output pin to be set or reset. This parameter can be one - * of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @retval IO pin(s) state. - */ -uint32_t stmpe811_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - return((uint32_t)(IOE_Read(DeviceAddr, STMPE811_REG_IO_MP_STA) & (uint8_t)IO_Pin)); -} - -/** - * @brief Enable the global IO interrupt source. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_IO_EnableIT(uint16_t DeviceAddr) -{ - IOE_ITConfig(); - - /* Enable global IO IT source */ - stmpe811_EnableITSource(DeviceAddr, STMPE811_GIT_IO); - - /* Enable global interrupt */ - stmpe811_EnableGlobalIT(DeviceAddr); -} - -/** - * @brief Disable the global IO interrupt source. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_IO_DisableIT(uint16_t DeviceAddr) -{ - /* Disable the global interrupt */ - stmpe811_DisableGlobalIT(DeviceAddr); - - /* Disable global IO IT source */ - stmpe811_DisableITSource(DeviceAddr, STMPE811_GIT_IO); -} - -/** - * @brief Enable interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be enabled. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmp = 0; - - /* Get the IO interrupt state */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_IO_INT_EN); - - /* Set the interrupts to be enabled */ - tmp |= (uint8_t)IO_Pin; - - /* Write the register new value */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_INT_EN, tmp); -} - -/** - * @brief Disable interrupt mode for the selected IO pin(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be disabled. This parameter could be any - * combination of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - uint8_t tmp = 0; - - /* Get the IO interrupt state */ - tmp = IOE_Read(DeviceAddr, STMPE811_REG_IO_INT_EN); - - /* Set the interrupts to be Disabled */ - tmp &= ~(uint8_t)IO_Pin; - - /* Write the register new value */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_INT_EN, tmp); -} - -/** - * @brief Check the status of the selected IO interrupt pending bit - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: The IO interrupt to be checked could be: - * @arg STMPE811_PIN_x Where x can be from 0 to 7. - * @retval Status of the checked IO pin(s). - */ -uint32_t stmpe811_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - /* Get the Interrupt status */ - return(IOE_Read(DeviceAddr, STMPE811_REG_IO_INT_STA) & (uint8_t)IO_Pin); -} - -/** - * @brief Clear the selected IO interrupt pending bit(s). - * @param DeviceAddr: Device address on communication Bus. - * @param IO_Pin: the IO interrupt to be cleared, could be: - * @arg STMPE811_PIN_x: Where x can be from 0 to 7. - * @retval None - */ -void stmpe811_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin) -{ - /* Clear the global IO IT pending bit */ - stmpe811_ClearGlobalIT(DeviceAddr, STMPE811_GIT_IO); - - /* Clear the IO IT pending bit(s) */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_INT_STA, (uint8_t)IO_Pin); - - /* Clear the Edge detection pending bit*/ - IOE_Write(DeviceAddr, STMPE811_REG_IO_ED, (uint8_t)IO_Pin); - - /* Clear the Rising edge pending bit */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_RE, (uint8_t)IO_Pin); - - /* Clear the Falling edge pending bit */ - IOE_Write(DeviceAddr, STMPE811_REG_IO_FE, (uint8_t)IO_Pin); -} - -/** - * @brief Configures the touch Screen Controller (Single point detection) - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void stmpe811_TS_Start(uint16_t DeviceAddr) -{ - uint8_t mode; - - /* Get the current register value */ - mode = IOE_Read(DeviceAddr, STMPE811_REG_SYS_CTRL2); - - /* Set the Functionalities to be Enabled */ - mode &= ~(STMPE811_IO_FCT); - - /* Write the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_SYS_CTRL2, mode); - - /* Select TSC pins in TSC alternate mode */ - stmpe811_IO_EnableAF(DeviceAddr, STMPE811_TOUCH_IO_ALL); - - /* Set the Functionalities to be Enabled */ - mode &= ~(STMPE811_TS_FCT | STMPE811_ADC_FCT); - - /* Set the new register value */ - IOE_Write(DeviceAddr, STMPE811_REG_SYS_CTRL2, mode); - - /* Select Sample Time, bit number and ADC Reference */ - IOE_Write(DeviceAddr, STMPE811_REG_ADC_CTRL1, 0x49); - - /* Wait for 2 ms */ - IOE_Delay(2); - - /* Select the ADC clock speed: 3.25 MHz */ - IOE_Write(DeviceAddr, STMPE811_REG_ADC_CTRL2, 0x01); - - /* Select 2 nF filter capacitor */ - /* Configuration: - - Touch average control : 4 samples - - Touch delay time : 500 uS - - Panel driver setting time: 500 uS - */ - IOE_Write(DeviceAddr, STMPE811_REG_TSC_CFG, 0x9A); - - /* Configure the Touch FIFO threshold: single point reading */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_TH, 0x01); - - /* Clear the FIFO memory content. */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x01); - - /* Put the FIFO back into operation mode */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x00); - - /* Set the range and accuracy pf the pressure measurement (Z) : - - Fractional part :7 - - Whole part :1 - */ - IOE_Write(DeviceAddr, STMPE811_REG_TSC_FRACT_XYZ, 0x01); - - /* Set the driving capability (limit) of the device for TSC pins: 50mA */ - IOE_Write(DeviceAddr, STMPE811_REG_TSC_I_DRIVE, 0x01); - - /* Touch screen control configuration (enable TSC): - - No window tracking index - - XYZ acquisition mode - */ - IOE_Write(DeviceAddr, STMPE811_REG_TSC_CTRL, 0x01); - - /* Clear all the status pending bits if any */ - IOE_Write(DeviceAddr, STMPE811_REG_INT_STA, 0xFF); - - /* Wait for 2 ms delay */ - IOE_Delay(2); -} - -/** - * @brief Return if there is touch detected or not. - * @param DeviceAddr: Device address on communication Bus. - * @retval Touch detected state. - */ -uint8_t stmpe811_TS_DetectTouch(uint16_t DeviceAddr) -{ - uint8_t state; - uint8_t ret = 0; - - state = ((IOE_Read(DeviceAddr, STMPE811_REG_TSC_CTRL) & (uint8_t)STMPE811_TS_CTRL_STATUS) == (uint8_t)STMPE811_TS_CTRL_STATUS); - - if(state > 0) - { - if(IOE_Read(DeviceAddr, STMPE811_REG_FIFO_SIZE) > 0) - { - ret = 1; - } - } - else - { - /* Reset FIFO */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x01); - /* Enable the FIFO again */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x00); - } - - return ret; -} - -/** - * @brief Get the touch screen X and Y positions values - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void stmpe811_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - uint8_t dataXYZ[4]; - uint32_t uldataXYZ; - - IOE_ReadMultiple(DeviceAddr, STMPE811_REG_TSC_DATA_NON_INC, dataXYZ, sizeof(dataXYZ)) ; - - /* Calculate positions values */ - uldataXYZ = (dataXYZ[0] << 24)|(dataXYZ[1] << 16)|(dataXYZ[2] << 8)|(dataXYZ[3] << 0); - *X = (uldataXYZ >> 20) & 0x00000FFF; - *Y = (uldataXYZ >> 8) & 0x00000FFF; - - /* Reset FIFO */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x01); - /* Enable the FIFO again */ - IOE_Write(DeviceAddr, STMPE811_REG_FIFO_STA, 0x00); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_TS_EnableIT(uint16_t DeviceAddr) -{ - IOE_ITConfig(); - - /* Enable global TS IT source */ - stmpe811_EnableITSource(DeviceAddr, STMPE811_TS_IT); - - /* Enable global interrupt */ - stmpe811_EnableGlobalIT(DeviceAddr); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_TS_DisableIT(uint16_t DeviceAddr) -{ - /* Disable global interrupt */ - stmpe811_DisableGlobalIT(DeviceAddr); - - /* Disable global TS IT source */ - stmpe811_DisableITSource(DeviceAddr, STMPE811_TS_IT); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval TS interrupts status - */ -uint8_t stmpe811_TS_ITStatus(uint16_t DeviceAddr) -{ - /* Return TS interrupts status */ - return(stmpe811_ReadGITStatus(DeviceAddr, STMPE811_TS_IT)); -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void stmpe811_TS_ClearIT(uint16_t DeviceAddr) -{ - /* Clear the global TS IT source */ - stmpe811_ClearGlobalIT(DeviceAddr, STMPE811_TS_IT); -} - -/** - * @brief Check if the device instance of the selected address is already registered - * and return its index - * @param DeviceAddr: Device address on communication Bus. - * @retval Index of the device instance if registered, 0xFF if not. - */ -static uint8_t stmpe811_GetInstance(uint16_t DeviceAddr) -{ - uint8_t idx = 0; - - /* Check all the registered instances */ - for(idx = 0; idx < STMPE811_MAX_INSTANCE ; idx ++) - { - if(stmpe811[idx] == DeviceAddr) - { - return idx; - } - } - - return 0xFF; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/stmpe811/stmpe811.h b/Drivers/BSP/Components/stmpe811/stmpe811.h deleted file mode 100644 index 7eaf896ce1..0000000000 --- a/Drivers/BSP/Components/stmpe811/stmpe811.h +++ /dev/null @@ -1,270 +0,0 @@ -/** - ****************************************************************************** - * @file stmpe811.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stmpe811.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STMPE811_H -#define __STMPE811_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" -#include "../Common/io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @defgroup STMPE811 - * @{ - */ - -/** @defgroup STMPE811_Exported_Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STMPE811_Exported_Constants - * @{ - */ - -/* Chip IDs */ -#define STMPE811_ID 0x0811 - -/* Identification registers & System Control */ -#define STMPE811_REG_CHP_ID_LSB 0x00 -#define STMPE811_REG_CHP_ID_MSB 0x01 -#define STMPE811_REG_ID_VER 0x02 - -/* Global interrupt Enable bit */ -#define STMPE811_GIT_EN 0x01 - -/* IO expander functionalities */ -#define STMPE811_ADC_FCT 0x01 -#define STMPE811_TS_FCT 0x02 -#define STMPE811_IO_FCT 0x04 -#define STMPE811_TEMPSENS_FCT 0x08 - -/* Global Interrupts definitions */ -#define STMPE811_GIT_IO 0x80 /* IO interrupt */ -#define STMPE811_GIT_ADC 0x40 /* ADC interrupt */ -#define STMPE811_GIT_TEMP 0x20 /* Not implemented */ -#define STMPE811_GIT_FE 0x10 /* FIFO empty interrupt */ -#define STMPE811_GIT_FF 0x08 /* FIFO full interrupt */ -#define STMPE811_GIT_FOV 0x04 /* FIFO overflowed interrupt */ -#define STMPE811_GIT_FTH 0x02 /* FIFO above threshold interrupt */ -#define STMPE811_GIT_TOUCH 0x01 /* Touch is detected interrupt */ -#define STMPE811_ALL_GIT 0x1F /* All global interrupts */ -#define STMPE811_TS_IT (STMPE811_GIT_TOUCH | STMPE811_GIT_FTH | STMPE811_GIT_FOV | STMPE811_GIT_FF | STMPE811_GIT_FE) /* Touch screen interrupts */ - -/* General Control Registers */ -#define STMPE811_REG_SYS_CTRL1 0x03 -#define STMPE811_REG_SYS_CTRL2 0x04 -#define STMPE811_REG_SPI_CFG 0x08 - -/* Interrupt system Registers */ -#define STMPE811_REG_INT_CTRL 0x09 -#define STMPE811_REG_INT_EN 0x0A -#define STMPE811_REG_INT_STA 0x0B -#define STMPE811_REG_IO_INT_EN 0x0C -#define STMPE811_REG_IO_INT_STA 0x0D - -/* IO Registers */ -#define STMPE811_REG_IO_SET_PIN 0x10 -#define STMPE811_REG_IO_CLR_PIN 0x11 -#define STMPE811_REG_IO_MP_STA 0x12 -#define STMPE811_REG_IO_DIR 0x13 -#define STMPE811_REG_IO_ED 0x14 -#define STMPE811_REG_IO_RE 0x15 -#define STMPE811_REG_IO_FE 0x16 -#define STMPE811_REG_IO_AF 0x17 - -/* ADC Registers */ -#define STMPE811_REG_ADC_INT_EN 0x0E -#define STMPE811_REG_ADC_INT_STA 0x0F -#define STMPE811_REG_ADC_CTRL1 0x20 -#define STMPE811_REG_ADC_CTRL2 0x21 -#define STMPE811_REG_ADC_CAPT 0x22 -#define STMPE811_REG_ADC_DATA_CH0 0x30 -#define STMPE811_REG_ADC_DATA_CH1 0x32 -#define STMPE811_REG_ADC_DATA_CH2 0x34 -#define STMPE811_REG_ADC_DATA_CH3 0x36 -#define STMPE811_REG_ADC_DATA_CH4 0x38 -#define STMPE811_REG_ADC_DATA_CH5 0x3A -#define STMPE811_REG_ADC_DATA_CH6 0x3B -#define STMPE811_REG_ADC_DATA_CH7 0x3C - -/* Touch Screen Registers */ -#define STMPE811_REG_TSC_CTRL 0x40 -#define STMPE811_REG_TSC_CFG 0x41 -#define STMPE811_REG_WDM_TR_X 0x42 -#define STMPE811_REG_WDM_TR_Y 0x44 -#define STMPE811_REG_WDM_BL_X 0x46 -#define STMPE811_REG_WDM_BL_Y 0x48 -#define STMPE811_REG_FIFO_TH 0x4A -#define STMPE811_REG_FIFO_STA 0x4B -#define STMPE811_REG_FIFO_SIZE 0x4C -#define STMPE811_REG_TSC_DATA_X 0x4D -#define STMPE811_REG_TSC_DATA_Y 0x4F -#define STMPE811_REG_TSC_DATA_Z 0x51 -#define STMPE811_REG_TSC_DATA_XYZ 0x52 -#define STMPE811_REG_TSC_FRACT_XYZ 0x56 -#define STMPE811_REG_TSC_DATA_INC 0x57 -#define STMPE811_REG_TSC_DATA_NON_INC 0xD7 -#define STMPE811_REG_TSC_I_DRIVE 0x58 -#define STMPE811_REG_TSC_SHIELD 0x59 - -/* Touch Screen Pins definition */ -#define STMPE811_TOUCH_YD STMPE811_PIN_7 -#define STMPE811_TOUCH_XD STMPE811_PIN_6 -#define STMPE811_TOUCH_YU STMPE811_PIN_5 -#define STMPE811_TOUCH_XU STMPE811_PIN_4 -#define STMPE811_TOUCH_IO_ALL (uint32_t)(STMPE811_TOUCH_YD | STMPE811_TOUCH_XD | STMPE811_TOUCH_YU | STMPE811_TOUCH_XU) - -/* IO Pins definition */ -#define STMPE811_PIN_0 0x01 -#define STMPE811_PIN_1 0x02 -#define STMPE811_PIN_2 0x04 -#define STMPE811_PIN_3 0x08 -#define STMPE811_PIN_4 0x10 -#define STMPE811_PIN_5 0x20 -#define STMPE811_PIN_6 0x40 -#define STMPE811_PIN_7 0x80 -#define STMPE811_PIN_ALL 0xFF - -/* IO Pins directions */ -#define STMPE811_DIRECTION_IN 0x00 -#define STMPE811_DIRECTION_OUT 0x01 - -/* IO IT types */ -#define STMPE811_TYPE_LEVEL 0x00 -#define STMPE811_TYPE_EDGE 0x02 - -/* IO IT polarity */ -#define STMPE811_POLARITY_LOW 0x00 -#define STMPE811_POLARITY_HIGH 0x04 - -/* IO Pin IT edge modes */ -#define STMPE811_EDGE_FALLING 0x01 -#define STMPE811_EDGE_RISING 0x02 - -/* TS registers masks */ -#define STMPE811_TS_CTRL_ENABLE 0x01 -#define STMPE811_TS_CTRL_STATUS 0x80 -/** - * @} - */ - -/** @defgroup STMPE811_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STMPE811_Exported_Functions - * @{ - */ - -/** - * @brief STMPE811 Control functions - */ -void stmpe811_Init(uint16_t DeviceAddr); -void stmpe811_Reset(uint16_t DeviceAddr); -uint16_t stmpe811_ReadID(uint16_t DeviceAddr); -void stmpe811_EnableGlobalIT(uint16_t DeviceAddr); -void stmpe811_DisableGlobalIT(uint16_t DeviceAddr); -void stmpe811_EnableITSource(uint16_t DeviceAddr, uint8_t Source); -void stmpe811_DisableITSource(uint16_t DeviceAddr, uint8_t Source); -void stmpe811_SetITPolarity(uint16_t DeviceAddr, uint8_t Polarity); -void stmpe811_SetITType(uint16_t DeviceAddr, uint8_t Type); -uint8_t stmpe811_GlobalITStatus(uint16_t DeviceAddr, uint8_t Source); -uint8_t stmpe811_ReadGITStatus(uint16_t DeviceAddr, uint8_t Source); -void stmpe811_ClearGlobalIT(uint16_t DeviceAddr, uint8_t Source); - -/** - * @brief STMPE811 IO functionalities functions - */ -void stmpe811_IO_Start(uint16_t DeviceAddr, uint32_t IO_Pin); -uint8_t stmpe811_IO_Config(uint16_t DeviceAddr, uint32_t IO_Pin, IO_ModeTypedef IO_Mode); -void stmpe811_IO_InitPin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Direction); -void stmpe811_IO_EnableAF(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe811_IO_DisableAF(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe811_IO_SetEdgeMode(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t Edge); -void stmpe811_IO_WritePin(uint16_t DeviceAddr, uint32_t IO_Pin, uint8_t PinState); -uint32_t stmpe811_IO_ReadPin(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe811_IO_EnableIT(uint16_t DeviceAddr); -void stmpe811_IO_DisableIT(uint16_t DeviceAddr); -void stmpe811_IO_EnablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe811_IO_DisablePinIT(uint16_t DeviceAddr, uint32_t IO_Pin); -uint32_t stmpe811_IO_ITStatus(uint16_t DeviceAddr, uint32_t IO_Pin); -void stmpe811_IO_ClearIT(uint16_t DeviceAddr, uint32_t IO_Pin); - -/** - * @brief STMPE811 Touch screen functionalities functions - */ -void stmpe811_TS_Start(uint16_t DeviceAddr); -uint8_t stmpe811_TS_DetectTouch(uint16_t DeviceAddr); -void stmpe811_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); -void stmpe811_TS_EnableIT(uint16_t DeviceAddr); -void stmpe811_TS_DisableIT(uint16_t DeviceAddr); -uint8_t stmpe811_TS_ITStatus (uint16_t DeviceAddr); -void stmpe811_TS_ClearIT (uint16_t DeviceAddr); - -void IOE_Init(void); -void IOE_ITConfig (void); -void IOE_Delay(uint32_t delay); -void IOE_Write(uint8_t addr, uint8_t reg, uint8_t value); -uint8_t IOE_Read(uint8_t addr, uint8_t reg); -uint16_t IOE_ReadMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); - -/* Touch screen driver structure */ -extern TS_DrvTypeDef stmpe811_ts_drv; - -/* IO driver structure */ -extern IO_DrvTypeDef stmpe811_io_drv; - -#ifdef __cplusplus -} -#endif -#endif /* __STMPE811_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ts3510 b/Drivers/BSP/Components/ts3510 new file mode 160000 index 0000000000..7af3fb7fcb --- /dev/null +++ b/Drivers/BSP/Components/ts3510 @@ -0,0 +1 @@ +Subproject commit 7af3fb7fcb504b87d6abbcbd66679eb603b60c84 diff --git a/Drivers/BSP/Components/ts3510/LICENSE.md b/Drivers/BSP/Components/ts3510/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/ts3510/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/ts3510/Release_Notes.html b/Drivers/BSP/Components/ts3510/Release_Notes.html deleted file mode 100644 index fd530bda62..0000000000 --- a/Drivers/BSP/Components/ts3510/Release_Notes.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - Release Notes for TS3510 Component Driver - - - - - - -
-
-
-

Release Notes for

-

TS3510 Component Driver

-

Copyright © 2014 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the TS3510 Component Driver.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update comments to be used for PDSC generation
  • -
-
-
-
- -
-

Main Changes

-
    -
  • ts3510.h: change “" byâ€/" in the include path to fix compilation issue under Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of TS3510 TS component driver
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/ts3510/_htmresc/favicon.png b/Drivers/BSP/Components/ts3510/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/ts3510/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/ts3510/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/ts3510/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/ts3510/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/ts3510/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/ts3510/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/ts3510/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/ts3510/ts3510.c b/Drivers/BSP/Components/ts3510/ts3510.c deleted file mode 100644 index a19e3c6931..0000000000 --- a/Drivers/BSP/Components/ts3510/ts3510.c +++ /dev/null @@ -1,236 +0,0 @@ -/** - ****************************************************************************** - * @file ts3510.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the TS3510 - * IO Expander devices. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "ts3510.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup TS3510 - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup TS3510_Private_Types_Definitions - * @{ - */ - -/* Private define ------------------------------------------------------------*/ - -/** @defgroup TS3510_Private_Defines - * @{ - */ - -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup TS3510_Private_Macros - * @{ - */ - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup TS3510_Private_Variables - * @{ - */ - -/* Touch screen driver structure initialization */ -TS_DrvTypeDef ts3510_ts_drv = -{ - ts3510_Init, - ts3510_ReadID, - ts3510_Reset, - - ts3510_TS_Start, - ts3510_TS_DetectTouch, - ts3510_TS_GetXY, - - ts3510_TS_EnableIT, - ts3510_TS_ClearIT, - ts3510_TS_ITStatus, - ts3510_TS_DisableIT, -}; - -/** - * @} - */ - -/* Private function prototypes -----------------------------------------------*/ - -/** @defgroup ts3510_Private_Function_Prototypes - * @{ - */ - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup ts3510_Private_Functions - * @{ - */ - -/** - * @brief Initialize the ts3510 and configure the needed hardware resources - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void ts3510_Init(uint16_t DeviceAddr) -{ - /* Initialize IO BUS layer */ - IOE_Init(); - -} - -/** - * @brief Reset the ts3510 by Software. - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void ts3510_Reset(uint16_t DeviceAddr) -{ - -} - -/** - * @brief Read the ts3510 IO Expander device ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The Device ID (two bytes). - */ -uint16_t ts3510_ReadID(uint16_t DeviceAddr) -{ - return 0; -} - -/** - * @brief Configures the touch Screen Controller (Single point detection) - * @param DeviceAddr: Device address on communication Bus. - * @retval None. - */ -void ts3510_TS_Start(uint16_t DeviceAddr) -{ -} - -/** - * @brief Return if there is touch detected or not. - * @param DeviceAddr: Device address on communication Bus. - * @retval Touch detected state. - */ -uint8_t ts3510_TS_DetectTouch(uint16_t DeviceAddr) -{ - uint8_t aBufferTS[11]; - uint8_t aTmpBuffer[2] = {TS3510_READ_CMD, TS3510_WRITE_CMD}; - - /* Prepare for LCD read data */ - IOE_WriteMultiple(DeviceAddr, TS3510_SEND_CMD_REG, aTmpBuffer, 2); - - /* Read TS data from LCD */ - IOE_ReadMultiple(DeviceAddr, TS3510_READ_BLOCK_REG, aBufferTS, 11); - - /* check for first byte */ - if((aBufferTS[1] == 0xFF) && (aBufferTS[2] == 0xFF) && (aBufferTS[3] == 0xFF) && (aBufferTS[4] == 0xFF)) - { - return 0; - } - else - { - return 1; - } -} - -/** - * @brief Get the touch screen X and Y positions values - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -void ts3510_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) -{ - uint8_t aBufferTS[11]; - uint8_t aTmpBuffer[2] = {TS3510_READ_CMD, TS3510_WRITE_CMD}; - - /* Prepare for LCD read data */ - IOE_WriteMultiple(DeviceAddr, TS3510_SEND_CMD_REG, aTmpBuffer, 2); - - /* Read TS data from LCD */ - IOE_ReadMultiple(DeviceAddr, TS3510_READ_BLOCK_REG, aBufferTS, 11); - - /* Calculate positions */ - *X = (((aBufferTS[1] << 8) | aBufferTS[2]) << 12) / 640; - *Y = (((aBufferTS[3] << 8) | aBufferTS[4]) << 12) / 480; - - /* set position to be relative to 12bits resolution */ -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void ts3510_TS_EnableIT(uint16_t DeviceAddr) -{ -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void ts3510_TS_DisableIT(uint16_t DeviceAddr) -{ -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval TS interrupts status - */ -uint8_t ts3510_TS_ITStatus(uint16_t DeviceAddr) -{ - return 0; -} - -/** - * @brief Configure the selected source to generate a global interrupt or not - * @param DeviceAddr: Device address on communication Bus. - * @retval None - */ -void ts3510_TS_ClearIT(uint16_t DeviceAddr) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/ts3510/ts3510.h b/Drivers/BSP/Components/ts3510/ts3510.h deleted file mode 100644 index d1baf8012c..0000000000 --- a/Drivers/BSP/Components/ts3510/ts3510.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - ****************************************************************************** - * @file ts3510.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * ts3510.c IO expander driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2014 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __TS3510_H -#define __TS3510_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @defgroup TS3510 - * @{ - */ - -/* Exported types ------------------------------------------------------------*/ - -/** @defgroup TS3510_Exported_Types - * @{ - */ - -/* Exported constants --------------------------------------------------------*/ - -/** @defgroup TS3510_Exported_Constants - * @{ - */ - -/* */ -#define TS3510_READ_BLOCK_REG 0x8A -#define TS3510_SEND_CMD_REG 0x00 -#define TS3510_READ_CMD 0x81 -#define TS3510_WRITE_CMD 0x08 - - -/** - * @} - */ - -/* Exported macro ------------------------------------------------------------*/ - -/** @defgroup ts3510_Exported_Macros - * @{ - */ - -/* Exported functions --------------------------------------------------------*/ - -/** @defgroup ts3510_Exported_Functions - * @{ - */ - -/** - * @brief ts3510 Control functions - */ -void ts3510_Init(uint16_t DeviceAddr); -void ts3510_Reset(uint16_t DeviceAddr); -uint16_t ts3510_ReadID(uint16_t DeviceAddr); -void ts3510_TS_Start(uint16_t DeviceAddr); -uint8_t ts3510_TS_DetectTouch(uint16_t DeviceAddr); -void ts3510_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); -void ts3510_TS_EnableIT(uint16_t DeviceAddr); -void ts3510_TS_DisableIT(uint16_t DeviceAddr); -uint8_t ts3510_TS_ITStatus (uint16_t DeviceAddr); -void ts3510_TS_ClearIT (uint16_t DeviceAddr); - -void IOE_Init(void); -void IOE_Delay(uint32_t delay); -uint8_t IOE_Read(uint8_t addr, uint8_t reg); -uint16_t IOE_ReadMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); -void IOE_WriteMultiple(uint8_t addr, uint8_t reg, uint8_t *buffer, uint16_t length); - -/* Touch screen driver structure */ -extern TS_DrvTypeDef ts3510_ts_drv; - -#ifdef __cplusplus -} -#endif -#endif /* __TS3510_H */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/wm8994 b/Drivers/BSP/Components/wm8994 new file mode 160000 index 0000000000..65fc4abeb4 --- /dev/null +++ b/Drivers/BSP/Components/wm8994 @@ -0,0 +1 @@ +Subproject commit 65fc4abeb436d01a9d06de4e8722ec05ed812e41 diff --git a/Drivers/BSP/Components/wm8994/LICENSE.md b/Drivers/BSP/Components/wm8994/LICENSE.md deleted file mode 100644 index e94b88c387..0000000000 --- a/Drivers/BSP/Components/wm8994/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Drivers/BSP/Components/wm8994/Release_Notes.html b/Drivers/BSP/Components/wm8994/Release_Notes.html deleted file mode 100644 index 412f1c67e0..0000000000 --- a/Drivers/BSP/Components/wm8994/Release_Notes.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - Release Notes for WM8994 Component Drivers - - - - - - -
-
-
-

Release Notes for

-

WM8994 Component Drivers

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the WM8994 Component Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update release notes format
  • -
  • Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • wm8994.c: fix no audio output issue
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add support of ColdStartup sequence for headphone -
      -
    • Unmute is performed in a gradual way to minimize pop noise.
    • -
    • Update wm8994_SetFrequency to support AUDIO_FREQUENCY_32K
    • -
    • Update comments to be used for PDSC generation
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • wm8994.c -
      -
    • Update wm8994_Init() by adding the support of analog microphone connected to INPUT LINE 1, INPUT_DEVICE_DIGITAL_MICROPHONE_1 and INPUT_DEVICE_DIGITAL_MIC1_MIC2
    • -
    • Add AUDIO_FREQUENCY_32K as possible AudioFreq value
    • -
  • -
  • wm8994.h -
      -
    • Add INPUT_DEVICE_DIGITAL_MIC1_MIC2 define
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • wm8994.h -
      -
    • Add codec de-initialization function: wm8994_DeInit()
    • -
    • Add Audio IO de-initialization function prototype: AUDIO_IO_DeInit()
    • -
    • Add INPUT_DEVICE_INPUT_LINE_1 and INPUT_DEVICE_INPUT_LINE_1 support for AUDIO IN
    • -
    • Add Input audio volume control support
    • -
  • -
  • wm8994.c -
      -
    • Update wm8994_Init() function to support the Audio IN
    • -
    • Update wm8994_Stop() function to only stop the codec if it was configured
    • -
    • Enable VMID_BUF_ENA bit in R57 ANTIPOP register (address 0x39) for all configurations
    • -
  • -
-

NOTE This release must be used with BSP Common driver V4.0.0 or later.

-
-
-
- -
-

Main Changes

-
    -
  • wm8994.c: Update the wm8994_Init() function to set the volume after enabling the dynamic charge pump power control mode
  • -
-
-
-
- -
-

Main Changes

-
    -
  • wm8994.h: change Ҡby “/†in the include path to fix compilation issue with Linux
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/Components/wm8994/_htmresc/favicon.png b/Drivers/BSP/Components/wm8994/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/Components/wm8994/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/Components/wm8994/_htmresc/mini-st_2020.css b/Drivers/BSP/Components/wm8994/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/Components/wm8994/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/Components/wm8994/_htmresc/st_logo_2020.png b/Drivers/BSP/Components/wm8994/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/Components/wm8994/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/Components/wm8994/wm8994.c b/Drivers/BSP/Components/wm8994/wm8994.c deleted file mode 100644 index 82ef662b52..0000000000 --- a/Drivers/BSP/Components/wm8994/wm8994.c +++ /dev/null @@ -1,1175 +0,0 @@ -/** - ****************************************************************************** - * @file wm8994.c - * @author MCD Application Team - * @brief This file provides the WM8994 Audio Codec driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "wm8994.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Components - * @{ - */ - -/** @addtogroup wm8994 - * @brief This file provides a set of functions needed to drive the - * WM8994 audio codec. - * @{ - */ - -/** @defgroup WM8994_Private_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup WM8994_Private_Defines - * @{ - */ -/* Uncomment this line to enable verifying data sent to codec after each write - operation (for debug purpose) */ -#if !defined (VERIFY_WRITTENDATA) -/*#define VERIFY_WRITTENDATA*/ -#endif /* VERIFY_WRITTENDATA */ -/** - * @} - */ - -/** @defgroup WM8994_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @defgroup WM8994_Private_Variables - * @{ - */ - -/* Audio codec driver structure initialization */ -AUDIO_DrvTypeDef wm8994_drv = -{ - wm8994_Init, - wm8994_DeInit, - wm8994_ReadID, - - wm8994_Play, - wm8994_Pause, - wm8994_Resume, - wm8994_Stop, - - wm8994_SetFrequency, - wm8994_SetVolume, - wm8994_SetMute, - wm8994_SetOutputMode, - - wm8994_Reset -}; - -static uint32_t outputEnabled = 0; -static uint32_t inputEnabled = 0; -static uint8_t ColdStartup = 1; - -/** - * @} - */ - -/** @defgroup WM8994_Function_Prototypes - * @{ - */ -static uint8_t CODEC_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -/** - * @} - */ - - -/** @defgroup WM8994_Private_Functions - * @{ - */ - -/** - * @brief Initializes the audio codec and the control interface. - * @param DeviceAddr: Device address on communication Bus. - * @param OutputInputDevice: can be OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH, OUTPUT_DEVICE_AUTO, INPUT_DEVICE_DIGITAL_MICROPHONE_1, - * INPUT_DEVICE_DIGITAL_MICROPHONE_2, INPUT_DEVICE_DIGITAL_MIC1_MIC2, - * INPUT_DEVICE_INPUT_LINE_1 or INPUT_DEVICE_INPUT_LINE_2. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio Frequency - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Init(uint16_t DeviceAddr, uint16_t OutputInputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint32_t counter = 0; - uint16_t output_device = OutputInputDevice & 0xFF; - uint16_t input_device = OutputInputDevice & 0xFF00; - uint16_t power_mgnt_reg_1 = 0; - uint16_t tmp; - - /* Initialize the Control interface of the Audio Codec */ - AUDIO_IO_Init(); - /* wm8994 Errata Work-Arounds */ - tmp = 0x0003; - counter += CODEC_IO_Write(DeviceAddr, 0x102, tmp); - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, 0x817, tmp); - counter += CODEC_IO_Write(DeviceAddr, 0x102, tmp); - - /* Enable VMID soft start (fast), Start-up Bias Current Enabled */ - tmp = 0x006C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_ANTIPOP2, tmp); - - /* Enable bias generator, Enable VMID */ - if (input_device > 0) - { - tmp = 0x0013; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, tmp); - } - else - { - tmp = 0x0003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, tmp); - } - - /* Add Delay */ - AUDIO_IO_Delay(50); - - /* Path Configurations for output */ - if (output_device > 0) - { - outputEnabled = 1; - - switch (output_device) - { - case OUTPUT_DEVICE_SPEAKER: - /* Enable DAC1 (Left), Enable DAC1 (Right), - Disable DAC2 (Left), Disable DAC2 (Right)*/ - tmp = 0x0C0C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - - case OUTPUT_DEVICE_HEADPHONE: - /* Disable DAC1 (Left), Disable DAC1 (Right), - Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - - case OUTPUT_DEVICE_BOTH: - if (input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2) - { - /* Enable DAC1 (Left), Enable DAC1 (Right), - also Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303 | 0x0C0C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path - Enable the AIF1 Timeslot 1 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path - Enable the AIF1 Timeslot 1 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 2 (Left) mixer path - Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 2 (Right) mixer path - Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - } - else - { - /* Enable DAC1 (Left), Enable DAC1 (Right), - also Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303 | 0x0C0C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - } - break; - - case OUTPUT_DEVICE_AUTO : - default: - /* Disable DAC1 (Left), Disable DAC1 (Right), - Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - } - } - else - { - outputEnabled = 0; - } - - /* Path Configurations for input */ - if (input_device > 0) - { - inputEnabled = 1; - switch (input_device) - { - case INPUT_DEVICE_DIGITAL_MICROPHONE_2 : - /* Enable AIF1ADC2 (Left), Enable AIF1ADC2 (Right) - * Enable DMICDAT2 (Left), Enable DMICDAT2 (Right) - * Enable Left ADC, Enable Right ADC */ - tmp = 0x0C30; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_4, tmp); - - /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC2 Left/Right Timeslot 1 */ - tmp = 0x00DB; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DRC2, tmp); - - /* Disable IN1L, IN1R, IN2L, IN2R, Enable Thermal sensor & shutdown */ - tmp = 0x6000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_2, tmp); - - /* Enable the DMIC2(Left) to AIF1 Timeslot 1 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_LMR, tmp); - - /* Enable the DMIC2(Right) to AIF1 Timeslot 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_RMR, tmp); - - /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC2 signal detect */ - tmp = 0x000E; - counter += CODEC_IO_Write(DeviceAddr, WM8994_GPIO1, tmp); - break; - - case INPUT_DEVICE_INPUT_LINE_1 : - /* IN1LN_TO_IN1L, IN1LP_TO_VMID, IN1RN_TO_IN1R, IN1RP_TO_VMID */ - tmp = 0x0011; - counter += CODEC_IO_Write(DeviceAddr, WM8994_INPUT_MIXER_2, tmp); - - /* Disable mute on IN1L_TO_MIXINL and +30dB on IN1L PGA output */ - tmp = 0x0035; - counter += CODEC_IO_Write(DeviceAddr, WM8994_INPUT_MIXER_3, tmp); - - /* Disable mute on IN1R_TO_MIXINL, Gain = +30dB */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_INPUT_MIXER_4, tmp); - - /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right) - * Enable Left ADC, Enable Right ADC */ - tmp = 0x0303; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_4, tmp); - - /* Enable AIF1 DRC1 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */ - tmp = 0x00DB; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DRC1, tmp); - - /* Enable IN1L and IN1R, Disable IN2L and IN2R, Enable Thermal sensor & shutdown */ - tmp = 0x6350; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_2, tmp); - - /* Enable the ADCL(Left) to AIF1 Timeslot 0 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_LMR, tmp); - - /* Enable the ADCR(Right) to AIF1 Timeslot 0 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_RMR, tmp); - - /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */ - tmp = 0x000D; - counter += CODEC_IO_Write(DeviceAddr, WM8994_GPIO1, tmp); - break; - - case INPUT_DEVICE_DIGITAL_MICROPHONE_1 : - /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right) - * Enable DMICDAT1 (Left), Enable DMICDAT1 (Right) - * Enable Left ADC, Enable Right ADC */ - tmp = 0x030C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_4, tmp); - - /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */ - tmp = 0x00DB; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DRC1, tmp); - - /* Disable IN1L, IN1R, IN2L, IN2R, Enable Thermal sensor & shutdown */ - tmp = 0x6350; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_2, tmp); - - /* Enable the DMIC2(Left) to AIF1 Timeslot 0 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_LMR, tmp); - - /* Enable the DMIC2(Right) to AIF1 Timeslot 0 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_RMR, tmp); - - /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */ - tmp = 0x000D; - counter += CODEC_IO_Write(DeviceAddr, WM8994_GPIO1, tmp); - break; - case INPUT_DEVICE_DIGITAL_MIC1_MIC2 : - /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right) - * Enable DMICDAT1 (Left), Enable DMICDAT1 (Right) - * Enable Left ADC, Enable Right ADC */ - tmp = 0x0F3C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_4, tmp); - - /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC2 Left/Right Timeslot 1 */ - tmp = 0x00DB; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DRC2, tmp); - - /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DRC1, tmp); - - /* Disable IN1L, IN1R, Enable IN2L, IN2R, Thermal sensor & shutdown */ - tmp = 0x63A0; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_2, tmp); - - /* Enable the DMIC2(Left) to AIF1 Timeslot 0 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_LMR, tmp); - - /* Enable the DMIC2(Right) to AIF1 Timeslot 0 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_RMR, tmp); - - /* Enable the DMIC2(Left) to AIF1 Timeslot 1 (Left) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_LMR, tmp); - - /* Enable the DMIC2(Right) to AIF1 Timeslot 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_RMR, tmp); - - /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */ - tmp = 0x000D; - counter += CODEC_IO_Write(DeviceAddr, WM8994_GPIO1, tmp); - break; - case INPUT_DEVICE_INPUT_LINE_2 : - default: - /* Actually, no other input devices supported */ - counter++; - break; - } - } - else - { - inputEnabled = 0; - } - - /* Clock Configurations */ - switch (AudioFreq) - { - case AUDIO_FREQUENCY_8K: - /* AIF1 Sample Rate = 8 (KHz), ratio=256 */ - tmp = 0x0003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_16K: - /* AIF1 Sample Rate = 16 (KHz), ratio=256 */ - tmp = 0x0033; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_32K: - /* AIF1 Sample Rate = 32 (KHz), ratio=256 */ - tmp = 0x0063; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_48K: - /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ - tmp = 0x0083; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_96K: - /* AIF1 Sample Rate = 96 (KHz), ratio=256 */ - tmp = 0x00A3; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_11K: - /* AIF1 Sample Rate = 11.025 (KHz), ratio=256 */ - tmp = 0x0013; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_22K: - /* AIF1 Sample Rate = 22.050 (KHz), ratio=256 */ - tmp = 0x0043; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_44K: - /* AIF1 Sample Rate = 44.1 (KHz), ratio=256 */ - tmp = 0x0073; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - default: - /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ - tmp = 0x0083; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - } - - if(input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2) - { - /* AIF1 Word Length = 16-bits, AIF1 Format = DSP mode */ - tmp = 0x4018; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_CONTROL1, tmp); - } - else - { - /* AIF1 Word Length = 16-bits, AIF1 Format = I2S (Default Register Value) */ - tmp = 0x4010; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_CONTROL1, tmp); - } - - /* slave mode */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_MASTER_SLAVE, tmp); - - /* Enable the DSP processing clock for AIF1, Enable the core clock */ - tmp = 0x000A; - counter += CODEC_IO_Write(DeviceAddr, WM8994_CLOCKING1, tmp); - - /* Enable AIF1 Clock, AIF1 Clock Source = MCLK1 pin */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_CLOCKING1, tmp); - - if (output_device > 0) /* Audio output selected */ - { - if (output_device == OUTPUT_DEVICE_HEADPHONE) - { - /* Select DAC1 (Left) to Left Headphone Output PGA (HPOUT1LVOL) path */ - tmp = 0x0100; - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_1, tmp); - - /* Select DAC1 (Right) to Right Headphone Output PGA (HPOUT1RVOL) path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_2, tmp); - - /* Startup sequence for Headphone */ - if(ColdStartup) - { - tmp = 0x8100; - counter += CODEC_IO_Write(DeviceAddr,WM8994_WRITE_SEQ_CTRL1, tmp); - - ColdStartup=0; - /* Add Delay */ - AUDIO_IO_Delay(300); - } - else /* Headphone Warm Start-Up */ - { - tmp = 0x8108; - counter += CODEC_IO_Write(DeviceAddr,WM8994_WRITE_SEQ_CTRL1, tmp); - /* Add Delay */ - AUDIO_IO_Delay(50); - } - - /* Soft un-Mute the AIF1 Timeslot 0 DAC1 path L&R */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_FILTER1, tmp); - } - /* Analog Output Configuration */ - - /* Enable SPKRVOL PGA, Enable SPKMIXR, Enable SPKLVOL PGA, Enable SPKMIXL */ - tmp = 0x0300; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_3, tmp); - - /* Left Speaker Mixer Volume = 0dB */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPKMIXL_ATT, tmp); - - /* Speaker output mode = Class D, Right Speaker Mixer Volume = 0dB ((0x23, 0x0100) = class AB)*/ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPKMIXR_ATT, tmp); - - /* Unmute DAC2 (Left) to Left Speaker Mixer (SPKMIXL) path, - Unmute DAC2 (Right) to Right Speaker Mixer (SPKMIXR) path */ - tmp = 0x0300; - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPEAKER_MIXER, tmp); - - /* Enable bias generator, Enable VMID, Enable SPKOUTL, Enable SPKOUTR */ - tmp = 0x3003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, tmp); - - /* Headphone/Speaker Enable */ - - if (input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2) - { - /* Enable Class W, Class W Envelope Tracking = AIF1 Timeslots 0 and 1 */ - tmp = 0x0205; - counter += CODEC_IO_Write(DeviceAddr, WM8994_CLASS_W, tmp); - } - else - { - /* Enable Class W, Class W Envelope Tracking = AIF1 Timeslot 0 */ - tmp = 0x0005; - counter += CODEC_IO_Write(DeviceAddr, WM8994_CLASS_W, tmp); - } - - /* Enable bias generator, Enable VMID, Enable HPOUT1 (Left) and Enable HPOUT1 (Right) input stages */ - /* idem for Speaker */ - power_mgnt_reg_1 |= 0x0303 | 0x3003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, power_mgnt_reg_1); - - /* Enable HPOUT1 (Left) and HPOUT1 (Right) intermediate stages */ - tmp = 0x0022; - counter += CODEC_IO_Write(DeviceAddr, WM8994_ANALOG_HP, tmp); - - /* Enable Charge Pump */ - tmp = 0x9F25; - counter += CODEC_IO_Write(DeviceAddr, WM8994_CHARGE_PUMP1, tmp); - - /* Add Delay */ - AUDIO_IO_Delay(15); - - /* Select DAC1 (Left) to Left Headphone Output PGA (HPOUT1LVOL) path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_1, tmp); - - /* Select DAC1 (Right) to Right Headphone Output PGA (HPOUT1RVOL) path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_2, tmp); - - /* Enable Left Output Mixer (MIXOUTL), Enable Right Output Mixer (MIXOUTR) */ - /* idem for SPKOUTL and SPKOUTR */ - tmp = 0x0030 | 0x0300; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_3, tmp); - - /* Enable DC Servo and trigger start-up mode on left and right channels */ - tmp = 0x0033; - counter += CODEC_IO_Write(DeviceAddr, WM8994_DC_SERVO1, tmp); - - /* Add Delay */ - AUDIO_IO_Delay(257); - - /* Enable HPOUT1 (Left) and HPOUT1 (Right) intermediate and output stages. Remove clamps */ - tmp = 0x00EE; - counter += CODEC_IO_Write(DeviceAddr, WM8994_ANALOG_HP, tmp); - - /* Unmutes */ - - /* Unmute DAC 1 (Left) */ - tmp = 0x00C0; - counter += CODEC_IO_Write(DeviceAddr, WM8994_DAC1_LEFT_VOL, tmp); - - /* Unmute DAC 1 (Right) */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_DAC1_RIGHT_VOL, tmp); - - /* Unmute the AIF1 Timeslot 0 DAC path */ - tmp = 0x0010; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_FILTER1, tmp); - - /* Unmute DAC 2 (Left) */ - tmp = 0x00C0; - counter += CODEC_IO_Write(DeviceAddr, WM8994_DAC2_LEFT_VOL, tmp); - - /* Unmute DAC 2 (Right) */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_DAC2_RIGHT_VOL, tmp); - - /* Unmute the AIF1 Timeslot 1 DAC2 path */ - tmp = 0x0010; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_FILTER1, tmp); - - /* Volume Control */ - wm8994_SetVolume(DeviceAddr, Volume); - } - - if (input_device > 0) /* Audio input selected */ - { - if ((input_device == INPUT_DEVICE_DIGITAL_MICROPHONE_1) || (input_device == INPUT_DEVICE_DIGITAL_MICROPHONE_2)) - { - /* Enable Microphone bias 1 generator, Enable VMID */ - power_mgnt_reg_1 |= 0x0013; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, power_mgnt_reg_1); - - /* ADC oversample enable */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_OVERSAMPLING, tmp); - - /* AIF ADC2 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */ - tmp = 0x3800; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_FILTERS, tmp); - } - else if(input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2) - { - /* Enable Microphone bias 1 generator, Enable VMID */ - power_mgnt_reg_1 |= 0x0013; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_1, power_mgnt_reg_1); - - /* ADC oversample enable */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_OVERSAMPLING, tmp); - - /* AIF ADC1 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */ - tmp = 0x1800; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_FILTERS, tmp); - - /* AIF ADC2 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_FILTERS, tmp); - } - else if ((input_device == INPUT_DEVICE_INPUT_LINE_1) || (input_device == INPUT_DEVICE_INPUT_LINE_2)) - { - - /* Disable mute on IN1L, IN1L Volume = +0dB */ - tmp = 0x000B; - counter += CODEC_IO_Write(DeviceAddr, WM8994_LEFT_LINE_IN12_VOL, tmp); - - /* Disable mute on IN1R, IN1R Volume = +0dB */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_RIGHT_LINE_IN12_VOL, tmp); - - /* AIF ADC1 HPF enable, HPF cut = hifi mode fc=4Hz at fs=48kHz */ - tmp = 0x1800; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_FILTERS, tmp); - } - /* Volume Control */ - wm8994_SetVolume(DeviceAddr, Volume); - } - /* Return communication control value */ - return counter; -} - -/** - * @brief Deinitializes the audio codec. - * @param None - * @retval None - */ -void wm8994_DeInit(void) -{ - /* Deinitialize Audio Codec interface */ - AUDIO_IO_DeInit(); -} - -/** - * @brief Get the WM8994 ID. - * @param DeviceAddr: Device address on communication Bus. - * @retval The WM8994 ID - */ -uint32_t wm8994_ReadID(uint16_t DeviceAddr) -{ - /* Initialize the Control interface of the Audio Codec */ - AUDIO_IO_Init(); - - return ((uint32_t)AUDIO_IO_Read(DeviceAddr, WM8994_CHIPID_ADDR)); -} - -/** - * @brief Start the audio Codec play feature. - * @note For this codec no Play options are required. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size) -{ - uint32_t counter = 0; - - /* Resumes the audio file playing */ - /* Unmute the output first */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - return counter; -} - -/** - * @brief Pauses playing on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Pause(uint16_t DeviceAddr) -{ - uint32_t counter = 0; - uint16_t tmp; - - /* Pause the audio file playing */ - /* Mute the output first */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON); - - /* Put the Codec in Power save mode */ - tmp = 0x01; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_2, tmp); - - return counter; -} - -/** - * @brief Resumes playing on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Resume(uint16_t DeviceAddr) -{ - uint32_t counter = 0; - - /* Resumes the audio file playing */ - /* Unmute the output first */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - return counter; -} - -/** - * @brief Stops audio Codec playing. It powers down the codec. - * @param DeviceAddr: Device address on communication Bus. - * @param CodecPdwnMode: selects the power down mode. - * - CODEC_PDWN_SW: only mutes the audio codec. When resuming from this - * mode the codec keeps the previous initialization - * (no need to re-Initialize the codec registers). - * - CODEC_PDWN_HW: Physically power down the codec. When resuming from this - * mode, the codec is set to default configuration - * (user should re-Initialize the codec in order to - * play again the audio stream). - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Stop(uint16_t DeviceAddr, uint32_t CodecPdwnMode) -{ - uint32_t counter = 0; - uint16_t tmp; - - if (outputEnabled != 0) - { - /* Mute the output first */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON); - - if (CodecPdwnMode == CODEC_PDWN_SW) - { - /* Only output mute required*/ - } - else /* CODEC_PDWN_HW */ - { - /* Mute the AIF1 Timeslot 0 DAC1 path */ - tmp = 0x0200; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_FILTER1, tmp); - - /* Mute the AIF1 Timeslot 1 DAC2 path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_FILTER1, tmp); - - /* Disable DAC1L_TO_HPOUT1L */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_1, tmp); - - /* Disable DAC1R_TO_HPOUT1R */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_OUTPUT_MIXER_2, tmp); - - /* Disable DAC1 and DAC2 */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Reset Codec by writing in 0x0000 address register */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SW_RESET, tmp); - - outputEnabled = 0; - } - } - return counter; -} - -/** - * @brief Sets higher or lower the codec volume level. - * @param DeviceAddr: Device address on communication Bus. - * @param Volume: a byte value from 0 to 255 (refer to codec registers - * description for more details). - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_SetVolume(uint16_t DeviceAddr, uint8_t Volume) -{ - uint32_t counter = 0; - uint8_t convertedvol = VOLUME_CONVERT(Volume); - uint16_t tmp; - - /* Output volume */ - if (outputEnabled != 0) - { - if(convertedvol > 0x3E) - { - /* Unmute audio codec */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - /* Left Headphone Volume */ - tmp = 0x3F | 0x140; - counter += CODEC_IO_Write(DeviceAddr, WM8994_LEFT_OUTPUT_VOL, tmp); - - /* Right Headphone Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_RIGHT_OUTPUT_VOL, tmp); - - /* Left Speaker Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPK_LEFT_VOL, tmp); - - /* Right Speaker Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPK_RIGHT_VOL, tmp); - } - else if (Volume == 0) - { - /* Mute audio codec */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON); - } - else - { - /* Unmute audio codec */ - counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF); - - /* Left Headphone Volume */ - tmp = convertedvol | 0x140; - counter += CODEC_IO_Write(DeviceAddr, WM8994_LEFT_OUTPUT_VOL, tmp); - - /* Right Headphone Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_RIGHT_OUTPUT_VOL, tmp); - - /* Left Speaker Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPK_LEFT_VOL, tmp); - - /* Right Speaker Volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_SPK_RIGHT_VOL, tmp); - } - } - - /* Input volume */ - if (inputEnabled != 0) - { - convertedvol = VOLUME_IN_CONVERT(Volume); - - /* Left AIF1 ADC1 volume */ - tmp = convertedvol | 0x100; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_LEFT_VOL, tmp); - - /* Right AIF1 ADC1 volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC1_RIGHT_VOL, tmp); - - /* Left AIF1 ADC2 volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_LEFT_VOL, tmp); - - /* Right AIF1 ADC2 volume */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_ADC2_RIGHT_VOL, tmp); - } - return counter; -} - -/** - * @brief Enables or disables the mute feature on the audio codec. - * @param DeviceAddr: Device address on communication Bus. - * @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the - * mute mode. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_SetMute(uint16_t DeviceAddr, uint32_t Cmd) -{ - uint32_t counter = 0; - uint16_t tmp; - - if (outputEnabled != 0) - { - /* Set the Mute mode */ - if(Cmd == AUDIO_MUTE_ON) - { - /* Soft Mute the AIF1 Timeslot 0 DAC1 path L&R */ - tmp = 0x0200; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_FILTER1, tmp); - - /* Soft Mute the AIF1 Timeslot 1 DAC2 path L&R */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_FILTER1, tmp); - } - else /* AUDIO_MUTE_OFF Disable the Mute */ - { - /* Unmute the AIF1 Timeslot 0 DAC1 path L&R */ - tmp = 0x0010; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_FILTER1, tmp); - - /* Unmute the AIF1 Timeslot 1 DAC2 path L&R */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_FILTER1, tmp); - } - } - return counter; -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param DeviceAddr: Device address on communication Bus. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_SetOutputMode(uint16_t DeviceAddr, uint8_t Output) -{ - uint32_t counter = 0; - uint16_t tmp; - - switch (Output) - { - case OUTPUT_DEVICE_SPEAKER: - /* Enable DAC1 (Left), Enable DAC1 (Right), - Disable DAC2 (Left), Disable DAC2 (Right)*/ - tmp = 0x0C0C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - - case OUTPUT_DEVICE_HEADPHONE: - /* Disable DAC1 (Left), Disable DAC1 (Right), - Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - - case OUTPUT_DEVICE_BOTH: - /* Enable DAC1 (Left), Enable DAC1 (Right), - also Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303 | 0x0C0C; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0002; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - - default: - /* Disable DAC1 (Left), Disable DAC1 (Right), - Enable DAC2 (Left), Enable DAC2 (Right)*/ - tmp = 0x0303; - counter += CODEC_IO_Write(DeviceAddr, WM8994_PWR_MANAGEMENT_5, tmp); - - /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */ - tmp = 0x0001; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_LMR, tmp); - - /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC1_RMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */ - tmp = 0x0000; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_LMR, tmp); - - /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */ - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_DAC2_RMR, tmp); - break; - } - return counter; -} - -/** - * @brief Sets new frequency. - * @param DeviceAddr: Device address on communication Bus. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq) -{ - uint32_t counter = 0; - uint16_t tmp; - - /* Clock Configurations */ - switch (AudioFreq) - { - case AUDIO_FREQUENCY_8K: - /* AIF1 Sample Rate = 8 (KHz), ratio=256 */ - tmp = 0x0003; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_16K: - /* AIF1 Sample Rate = 16 (KHz), ratio=256 */ - tmp = 0x0033; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_32K: - /* AIF1 Sample Rate = 32 (KHz), ratio=256 */ - tmp = 0x0063; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_48K: - /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ - tmp = 0x0083; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_96K: - /* AIF1 Sample Rate = 96 (KHz), ratio=256 */ - tmp = 0x00A3; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_11K: - /* AIF1 Sample Rate = 11.025 (KHz), ratio=256 */ - tmp = 0x0013; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_22K: - /* AIF1 Sample Rate = 22.050 (KHz), ratio=256 */ - tmp = 0x0043; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - case AUDIO_FREQUENCY_44K: - /* AIF1 Sample Rate = 44.1 (KHz), ratio=256 */ - tmp = 0x0073; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - - default: - /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ - tmp = 0x0083; - counter += CODEC_IO_Write(DeviceAddr, WM8994_AIF1_RATE, tmp); - break; - } - return counter; -} - -/** - * @brief Resets wm8994 registers. - * @param DeviceAddr: Device address on communication Bus. - * @retval 0 if correct communication, else wrong communication - */ -uint32_t wm8994_Reset(uint16_t DeviceAddr) -{ - uint32_t counter = 0; - uint16_t tmp; - - /* Reset Codec by writing in 0x0000 address register */ - tmp = 0x0000; - counter = CODEC_IO_Write(DeviceAddr, WM8994_SW_RESET, tmp); - outputEnabled = 0; - inputEnabled=0; - - return counter; -} - -/** - * @brief Writes/Read a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - * @retval None - */ -static uint8_t CODEC_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint32_t result = 0; - - AUDIO_IO_Write(Addr, Reg, Value); - -#ifdef VERIFY_WRITTENDATA - /* Verify that the data has been correctly written */ - result = (AUDIO_IO_Read(Addr, Reg) == Value)? 0:1; -#endif /* VERIFY_WRITTENDATA */ - - return result; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/Components/wm8994/wm8994.h b/Drivers/BSP/Components/wm8994/wm8994.h deleted file mode 100644 index 10d62f648e..0000000000 --- a/Drivers/BSP/Components/wm8994/wm8994.h +++ /dev/null @@ -1,481 +0,0 @@ -/** - ****************************************************************************** - * @file wm8994.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * wm8994.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __WM8994_H -#define __WM8994_H - -/* Includes ------------------------------------------------------------------*/ -#include "../Common/audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup Component - * @{ - */ - -/** @addtogroup WM8994 - * @{ - */ - -/** @defgroup WM8994_Exported_Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup WM8994_Exported_Constants - * @{ - */ - -/******************************************************************************/ -/****************************** REGISTER MAPPING ******************************/ -/******************************************************************************/ -/* SW Reset */ -#define WM8994_SW_RESET 0x0000U - -/* Power Management */ -#define WM8994_PWR_MANAGEMENT_1 0x0001U -#define WM8994_PWR_MANAGEMENT_2 0x0002U -#define WM8994_PWR_MANAGEMENT_3 0x0003U -#define WM8994_PWR_MANAGEMENT_4 0x0004U -#define WM8994_PWR_MANAGEMENT_5 0x0005U -#define WM8994_PWR_MANAGEMENT_6 0x0006U - -/* Input mixer */ -#define WM8994_INPUT_MIXER_1 0x0015U -/* Input volume */ -#define WM8994_LEFT_LINE_IN12_VOL 0x0018U -#define WM8994_LEFT_LINE_IN34_VOL 0x0019U -#define WM8994_RIGHT_LINE_IN12_VOL 0x001AU -#define WM8994_RIGHT_LINE_IN34_VOL 0x001BU - -/* L/R Output volumes */ -#define WM8994_LEFT_OUTPUT_VOL 0x001CU -#define WM8994_RIGHT_OUTPUT_VOL 0x001DU -#define WM8994_LINE_OUTPUT_VOL 0x001EU -#define WM8994_OUTPUT2_VOL 0x001FU - - -/* L/R OPGA volumes */ -#define WM8994_LEFT_OPGA_VOL 0x0020U -#define WM8994_RIGHT_OPGA_VOL 0x0021U - -/* SPKMIXL/R Attenuation */ -#define WM8994_SPKMIXL_ATT 0x0022U -#define WM8994_SPKMIXR_ATT 0x0023U -#define WM8994_OUTPUT_MIXER 0x0024U -#define WM8994_CLASS_D 0x0025U -/* L/R Speakers volumes */ -#define WM8994_SPK_LEFT_VOL 0x0026U -#define WM8994_SPK_RIGHT_VOL 0x0027U - -/* Input mixer */ -#define WM8994_INPUT_MIXER_2 0x0028U -#define WM8994_INPUT_MIXER_3 0x0029U -#define WM8994_INPUT_MIXER_4 0x002AU -#define WM8994_INPUT_MIXER_5 0x002BU -#define WM8994_INPUT_MIXER_6 0x002CU - -/* Output mixer */ -#define WM8994_OUTPUT_MIXER_1 0x002DU -#define WM8994_OUTPUT_MIXER_2 0x002EU -#define WM8994_OUTPUT_MIXER_3 0x002FU -#define WM8994_OUTPUT_MIXER_4 0x0030U -#define WM8994_OUTPUT_MIXER_5 0x0031U -#define WM8994_OUTPUT_MIXER_6 0x0032U -#define WM8994_OUTPUT2_MIXER 0x0033U -#define WM8994_LINE_MIXER_1 0x0034U -#define WM8994_LINE_MIXER_2 0x0035U -#define WM8994_SPEAKER_MIXER 0x0036U -#define WM8994_ADD_CONTROL 0x0037U -/* Antipop */ -#define WM8994_ANTIPOP1 0x0038U -#define WM8994_ANTIPOP2 0x0039U -#define WM8994_MICBIAS 0x003AU -#define WM8994_LDO1 0x003BU -#define WM8994_LDO2 0x003CU - -/* Charge pump */ -#define WM8994_CHARGE_PUMP1 0x004CU -#define WM8994_CHARGE_PUMP2 0x004DU - -#define WM8994_CLASS_W 0x0051U - -#define WM8994_DC_SERVO1 0x0054U -#define WM8994_DC_SERVO2 0x0055U -#define WM8994_DC_SERVO_READBACK 0x0058U -#define WM8994_DC_SERVO_WRITEVAL 0x0059U - -/* Analog HP */ -#define WM8994_ANALOG_HP 0x0060U - -#define WM8994_CHIP_REVISION 0x0100U -#define WM8994_CONTROL_INTERFACE 0x0101U -#define WM8994_WRITE_SEQ_CTRL1 0x0110U -#define WM8994_WRITE_SEQ_CTRL2 0x0111U - -/* WM8994 clocking */ -#define WM8994_AIF1_CLOCKING1 0x0200U -#define WM8994_AIF1_CLOCKING2 0x0201U -#define WM8994_AIF2_CLOCKING1 0x0204U -#define WM8994_AIF2_CLOCKING2 0x0205U -#define WM8994_CLOCKING1 0x0208U -#define WM8994_CLOCKING2 0x0209U -#define WM8994_AIF1_RATE 0x0210U -#define WM8994_AIF2_RATE 0x0211U -#define WM8994_RATE_STATUS 0x0212U - -/* FLL1 Control */ -#define WM8994_FLL1_CONTROL1 0x0220U -#define WM8994_FLL1_CONTROL2 0x0221U -#define WM8994_FLL1_CONTROL3 0x0222U -#define WM8994_FLL1_CONTROL4 0x0223U -#define WM8994_FLL1_CONTROL5 0x0224U - -/* FLL2 Control */ -#define WM8994_FLL2_CONTROL1 0x0240U -#define WM8994_FLL2_CONTROL2 0x0241U -#define WM8994_FLL2_CONTROL3 0x0242U -#define WM8994_FLL2_CONTROL4 0x0243U -#define WM8994_FLL2_CONTROL5 0x0244U - - -/* AIF1 control */ -#define WM8994_AIF1_CONTROL1 0x0300U -#define WM8994_AIF1_CONTROL2 0x0301U -#define WM8994_AIF1_MASTER_SLAVE 0x0302U -#define WM8994_AIF1_BCLK 0x0303U -#define WM8994_AIF1_ADC_LRCLK 0x0304U -#define WM8994_AIF1_DAC_LRCLK 0x0305U -#define WM8994_AIF1_DAC_DELTA 0x0306U -#define WM8994_AIF1_ADC_DELTA 0x0307U - -/* AIF2 control */ -#define WM8994_AIF2_CONTROL1 0x0310U -#define WM8994_AIF2_CONTROL2 0x0311U -#define WM8994_AIF2_MASTER_SLAVE 0x0312U -#define WM8994_AIF2_BCLK 0x0313U -#define WM8994_AIF2_ADC_LRCLK 0x0314U -#define WM8994_AIF2_DAC_LRCLK 0x0315U -#define WM8994_AIF2_DAC_DELTA 0x0316U -#define WM8994_AIF2_ADC_DELTA 0x0317U - -/* AIF1 ADC/DAC LR volumes */ -#define WM8994_AIF1_ADC1_LEFT_VOL 0x0400U -#define WM8994_AIF1_ADC1_RIGHT_VOL 0x0401U -#define WM8994_AIF1_DAC1_LEFT_VOL 0x0402U -#define WM8994_AIF1_DAC1_RIGHT_VOL 0x0403U -#define WM8994_AIF1_ADC2_LEFT_VOL 0x0404U -#define WM8994_AIF1_ADC2_RIGHT_VOL 0x0405U -#define WM8994_AIF1_DAC2_LEFT_VOL 0x0406U -#define WM8994_AIF1_DAC2_RIGHT_VOL 0x0407U - -/* AIF1 ADC/DAC filters */ -#define WM8994_AIF1_ADC1_FILTERS 0x0410U -#define WM8994_AIF1_ADC2_FILTERS 0x0411U -#define WM8994_AIF1_DAC1_FILTER1 0x0420U -#define WM8994_AIF1_DAC1_FILTER2 0x0421U -#define WM8994_AIF1_DAC2_FILTER1 0x0422U -#define WM8994_AIF1_DAC2_FILTER2 0x0423U - -/* AIF1 DRC1 registers */ -#define WM8994_AIF1_DRC1 0x0440U -#define WM8994_AIF1_DRC1_1 0x0441U -#define WM8994_AIF1_DRC1_2 0x0442U -#define WM8994_AIF1_DRC1_3 0x0443U -#define WM8994_AIF1_DRC1_4 0x0444U -/* AIF1 DRC2 registers */ -#define WM8994_AIF1_DRC2 0x0450U -#define WM8994_AIF1_DRC2_1 0x0451U -#define WM8994_AIF1_DRC2_2 0x0452U -#define WM8994_AIF1_DRC2_3 0x0453U -#define WM8994_AIF1_DRC2_4 0x0454U - -/* AIF1 DAC1 EQ Gains Bands */ -#define WM8994_AIF1_DAC1_EQG_1 0x0480U -#define WM8994_AIF1_DAC1_EQG_2 0x0481U -#define WM8994_AIF1_DAC1_EQG_1A 0x0482U -#define WM8994_AIF1_DAC1_EQG_1B 0x0483U -#define WM8994_AIF1_DAC1_EQG_1PG 0x0484U -#define WM8994_AIF1_DAC1_EQG_2A 0x0485U -#define WM8994_AIF1_DAC1_EQG_2B 0x0486U -#define WM8994_AIF1_DAC1_EQG_2C 0x0487U -#define WM8994_AIF1_DAC1_EQG_2PG 0x0488U -#define WM8994_AIF1_DAC1_EQG_3A 0x0489U -#define WM8994_AIF1_DAC1_EQG_3B 0x048AU -#define WM8994_AIF1_DAC1_EQG_3C 0x048BU -#define WM8994_AIF1_DAC1_EQG_3PG 0x048CU -#define WM8994_AIF1_DAC1_EQG_4A 0x048DU -#define WM8994_AIF1_DAC1_EQG_4B 0x048EU -#define WM8994_AIF1_DAC1_EQG_4C 0x048FU -#define WM8994_AIF1_DAC1_EQG_4PG 0x0490U -#define WM8994_AIF1_DAC1_EQG_5A 0x0491U -#define WM8994_AIF1_DAC1_EQG_5B 0x0492U -#define WM8994_AIF1_DAC1_EQG_5PG 0x0493U - -/* AIF1 DAC2 EQ Gains/bands */ -#define WM8994_AIF1_DAC2_EQG_1 0x04A0U -#define WM8994_AIF1_DAC2_EQG_2 0x04A1U -#define WM8994_AIF1_DAC2_EQG_1A 0x04A2U -#define WM8994_AIF1_DAC2_EQG_1B 0x04A3U -#define WM8994_AIF1_DAC2_EQG_1PG 0x04A4U -#define WM8994_AIF1_DAC2_EQG_2A 0x04A5U -#define WM8994_AIF1_DAC2_EQG_2B 0x04A6U -#define WM8994_AIF1_DAC2_EQG_2C 0x04A7U -#define WM8994_AIF1_DAC2_EQG_2PG 0x04A8U -#define WM8994_AIF1_DAC2_EQG_3A 0x04A9U -#define WM8994_AIF1_DAC2_EQG_3B 0x04AAU -#define WM8994_AIF1_DAC2_EQG_3C 0x04ABU -#define WM8994_AIF1_DAC2_EQG_3PG 0x04ACU -#define WM8994_AIF1_DAC2_EQG_4A 0x04ADU -#define WM8994_AIF1_DAC2_EQG_4B 0x04AEU -#define WM8994_AIF1_DAC2_EQG_4C 0x04AFU -#define WM8994_AIF1_DAC2_EQG_4PG 0x04B0U -#define WM8994_AIF1_DAC2_EQG_5A 0x04B1U -#define WM8994_AIF1_DAC2_EQG_5B 0x04B2U -#define WM8994_AIF1_DAC2_EQG_5PG 0x04B3U - -/* AIF2 ADC/DAC LR volumes */ -#define WM8994_AIF2_ADC_LEFT_VOL 0x0500U -#define WM8994_AIF2_ADC_RIGHT_VOL 0x0501U -#define WM8994_AIF2_DAC_LEFT_VOL 0x0502U -#define WM8994_AIF2_DAC_RIGHT_VOL 0x0503U - -/* AIF2 ADC/DAC filters */ -#define WM8994_AIF2_ADC_FILTERS 0x0510U -#define WM8994_AIF2_DAC_FILTER_1 0x0520U -#define WM8994_AIF2_DAC_FILTER_2 0x0521U - -/* AIF2 DRC registers */ -#define WM8994_AIF2_DRC_1 0x0540U -#define WM8994_AIF2_DRC_2 0x0541U -#define WM8994_AIF2_DRC_3 0x0542U -#define WM8994_AIF2_DRC_4 0x0543U -#define WM8994_AIF2_DRC_5 0x0544U - -/* AIF2 EQ Gains/bands */ -#define WM8994_AIF2_EQG_1 0x0580U -#define WM8994_AIF2_EQG_2 0x0581U -#define WM8994_AIF2_EQG_1A 0x0582U -#define WM8994_AIF2_EQG_1B 0x0583U -#define WM8994_AIF2_EQG_1PG 0x0584U -#define WM8994_AIF2_EQG_2A 0x0585U -#define WM8994_AIF2_EQG_2B 0x0586U -#define WM8994_AIF2_EQG_2C 0x0587U -#define WM8994_AIF2_EQG_2PG 0x0588U -#define WM8994_AIF2_EQG_3A 0x0589U -#define WM8994_AIF2_EQG_3B 0x058AU -#define WM8994_AIF2_EQG_3C 0x058BU -#define WM8994_AIF2_EQG_3PG 0x058CU -#define WM8994_AIF2_EQG_4A 0x058DU -#define WM8994_AIF2_EQG_4B 0x058EU -#define WM8994_AIF2_EQG_4C 0x058FU -#define WM8994_AIF2_EQG_4PG 0x0590U -#define WM8994_AIF2_EQG_5A 0x0591U -#define WM8994_AIF2_EQG_5B 0x0592U -#define WM8994_AIF2_EQG_5PG 0x0593U - -/* AIF1 DAC1 Mixer volume */ -#define WM8994_DAC1_MIXER_VOL 0x0600U -/* AIF1 DAC1 Left Mixer Routing */ -#define WM8994_AIF1_DAC1_LMR 0x0601U -/* AIF1 DAC1 Righ Mixer Routing */ -#define WM8994_AIF1_DAC1_RMR 0x0602U -/* AIF1 DAC2 Mixer volume */ -#define WM8994_DAC2_MIXER_VOL 0x0603U -/* AIF1 DAC2 Left Mixer Routing */ -#define WM8994_AIF1_DAC2_LMR 0x0604U -/* AIF1 DAC2 Righ Mixer Routing */ -#define WM8994_AIF1_DAC2_RMR 0x0605U -/* AIF1 ADC1 Left Mixer Routing */ -#define WM8994_AIF1_ADC1_LMR 0x0606U -/* AIF1 ADC1 Righ Mixer Routing */ -#define WM8994_AIF1_ADC1_RMR 0x0607U -/* AIF1 ADC2 Left Mixer Routing */ -#define WM8994_AIF1_ADC2_LMR 0x0608U -/* AIF1 ADC2 Righ Mixer Routing */ -#define WM8994_AIF1_ADC2_RMR 0x0609U - -/* Volume control */ -#define WM8994_DAC1_LEFT_VOL 0x0610U -#define WM8994_DAC1_RIGHT_VOL 0x0611U -#define WM8994_DAC2_LEFT_VOL 0x0612U -#define WM8994_DAC2_RIGHT_VOL 0x0613U -#define WM8994_DAC_SOFTMUTE 0x0614U - -#define WM8994_OVERSAMPLING 0x0620U -#define WM8994_SIDETONE 0x0621U - -/* GPIO */ -#define WM8994_GPIO1 0x0700U -#define WM8994_GPIO2 0x0701U -#define WM8994_GPIO3 0x0702U -#define WM8994_GPIO4 0x0703U -#define WM8994_GPIO5 0x0704U -#define WM8994_GPIO6 0x0705U -#define WM8994_GPIO7 0x0706U -#define WM8994_GPIO8 0x0707U -#define WM8994_GPIO9 0x0708U -#define WM8994_GPIO10 0x0709U -#define WM8994_GPIO11 0x070AU -/* Pull Contol */ -#define WM8994_PULL_CONTROL_1 0x0720U -#define WM8994_PULL_CONTROL_2 0x0721U -/* WM8994 Inturrupts */ -#define WM8994_INT_STATUS_1 0x0730U -#define WM8994_INT_STATUS_2 0x0731U -#define WM8994_INT_RAW_STATUS_2 0x0732U -#define WM8994_INT_STATUS1_MASK 0x0738U -#define WM8994_INT_STATUS2_MASK 0x0739U -#define WM8994_INT_CONTROL 0x0740U -#define WM8994_IRQ_DEBOUNCE 0x0748U - -/* Write Sequencer registers from 0 to 511 */ -#define WM8994_WRITE_SEQUENCER0 0x3000U -#define WM8994_WRITE_SEQUENCER1 0x3001U -#define WM8994_WRITE_SEQUENCER2 0x3002U -#define WM8994_WRITE_SEQUENCER3 0x3003U - -#define WM8994_WRITE_SEQUENCER4 0x3508U -#define WM8994_WRITE_SEQUENCER5 0x3509U -#define WM8994_WRITE_SEQUENCER6 0x3510U -#define WM8994_WRITE_SEQUENCER7 0x3511U - -/******************************************************************************/ -/*************************** Codec User defines ******************************/ -/******************************************************************************/ -/* Codec output DEVICE */ -#define OUTPUT_DEVICE_SPEAKER 0x0001U -#define OUTPUT_DEVICE_HEADPHONE 0x0002U -#define OUTPUT_DEVICE_BOTH 0x0003U -#define OUTPUT_DEVICE_AUTO 0x0004U -#define INPUT_DEVICE_DIGITAL_MICROPHONE_1 0x0100U -#define INPUT_DEVICE_DIGITAL_MICROPHONE_2 0x0200U -#define INPUT_DEVICE_INPUT_LINE_1 0x0300U -#define INPUT_DEVICE_INPUT_LINE_2 0x0400U -#define INPUT_DEVICE_DIGITAL_MIC1_MIC2 0x0800U - -/* Volume Levels values */ -#define DEFAULT_VOLMIN 0x00U -#define DEFAULT_VOLMAX 0xFFU -#define DEFAULT_VOLSTEP 0x04U - -#define AUDIO_PAUSE 0U -#define AUDIO_RESUME 1U - -/* Codec POWER DOWN modes */ -#define CODEC_PDWN_HW 1U -#define CODEC_PDWN_SW 2U - -/* MUTE commands */ -#define AUDIO_MUTE_ON 1U -#define AUDIO_MUTE_OFF 0U - -/* AUDIO FREQUENCY */ -#define AUDIO_FREQUENCY_192K 192000U -#define AUDIO_FREQUENCY_96K 96000U -#define AUDIO_FREQUENCY_48K 48000U -#define AUDIO_FREQUENCY_44K 44100U -#define AUDIO_FREQUENCY_32K 32000U -#define AUDIO_FREQUENCY_22K 22050U -#define AUDIO_FREQUENCY_16K 16000U -#define AUDIO_FREQUENCY_11K 11025U -#define AUDIO_FREQUENCY_8K 8000U - -#define VOLUME_CONVERT(Volume) (((Volume) > 100)? 100:((uint8_t)(((Volume) * 63) / 100))) -#define VOLUME_IN_CONVERT(Volume) (((Volume) >= 100)? 239:((uint8_t)(((Volume) * 240) / 100))) - -/******************************************************************************/ -/****************************** REGISTER MAPPING ******************************/ -/******************************************************************************/ -/** - * @brief WM8994 ID - */ -#define WM8994_ID 0x8994U - -/** - * @brief Device ID Register: Reading from this register will indicate device - * family ID 8994h - */ -#define WM8994_CHIPID_ADDR 0x00U - -/** - * @} - */ - -/** @defgroup WM8994_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup WM8994_Exported_Functions - * @{ - */ - -/*------------------------------------------------------------------------------ - Audio Codec functions -------------------------------------------------------------------------------*/ -/* High Layer codec functions */ -uint32_t wm8994_Init(uint16_t DeviceAddr, uint16_t OutputInputDevice, uint8_t Volume, uint32_t AudioFreq); -void wm8994_DeInit(void); -uint32_t wm8994_ReadID(uint16_t DeviceAddr); -uint32_t wm8994_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size); -uint32_t wm8994_Pause(uint16_t DeviceAddr); -uint32_t wm8994_Resume(uint16_t DeviceAddr); -uint32_t wm8994_Stop(uint16_t DeviceAddr, uint32_t Cmd); -uint32_t wm8994_SetVolume(uint16_t DeviceAddr, uint8_t Volume); -uint32_t wm8994_SetMute(uint16_t DeviceAddr, uint32_t Cmd); -uint32_t wm8994_SetOutputMode(uint16_t DeviceAddr, uint8_t Output); -uint32_t wm8994_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq); -uint32_t wm8994_Reset(uint16_t DeviceAddr); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint8_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* Audio driver structure */ -extern AUDIO_DrvTypeDef wm8994_drv; - -#endif /* __WM8994_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery b/Drivers/BSP/STM32412G-Discovery new file mode 160000 index 0000000000..13b6611587 --- /dev/null +++ b/Drivers/BSP/STM32412G-Discovery @@ -0,0 +1 @@ +Subproject commit 13b661158737132415baf1742ced04bca7132c1b diff --git a/Drivers/BSP/STM32412G-Discovery/LICENSE.md b/Drivers/BSP/STM32412G-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32412G-Discovery/README.md b/Drivers/BSP/STM32412G-Discovery/README.md deleted file mode 100644 index 8694fc35b2..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# BSP STM32412G-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32412g-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32412g-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32412G-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32412g-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ft6x06](https://github.com/STMicroelectronics/stm32-ft6x06) -* [stm32-ls016b8uy](https://github.com/STMicroelectronics/stm32-ls016b8uy) -* [stm32-n25q128a](https://github.com/STMicroelectronics/stm32-n25q128a) -* [stm32-st7789h2](https://github.com/STMicroelectronics/stm32-st7789h2) -* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32412G-Discovery/Release_Notes.html b/Drivers/BSP/STM32412G-Discovery/Release_Notes.html deleted file mode 100644 index f28cb7ac68..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/Release_Notes.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - Release Notes for STM32F412G_Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F412G_Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F412G_Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • Removal of invalid COM2 argument for the BSP_COM_Init() function
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
  • Update to support the ft3x67 component
  • -
  • Fix wrong tearing effect pin (LCD_TE_PIN)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add general description of BSP drivers
  • -
  • Remove date & version
  • -
  • stm32412g_discovery_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32412g_discovery_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm32412g_discovery_audio.c/.h: -
      -
    • Support multi-buffering
    • -
    • Add BSP_AUDIO_IN_ConfigMicDefault and BSP_AUDIO_IN_ConfigDigitalMic APIs
    • -
  • -
  • stm32412g_discovery_ts.c/.h: -
      -
    • Add support of 180° orientation
    • -
  • -
  • stm32412g_discovery_lcd.c/.h: -
      -
    • Add support of 180° orientation
    • -
  • -
-

Notes:

-
    -
  • These BSP drivers break the compatibility with previous versions.
  • -
  • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official version of the STM32F412G Discovery Board Drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32412G-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32412G-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32412G-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32412G-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32412G-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32412G-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32412G-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32412G-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.c deleted file mode 100644 index 1cd7faf029..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.c +++ /dev/null @@ -1,1143 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM32412G-DISCOVERY board - * (MB1209) from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" - - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL STM32412G-DISCOVERY LOW LEVEL - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32412G Discovery Low Level Private Typedef - * @{ - */ -typedef struct -{ - __IO uint16_t REG; - __IO uint16_t RAM; -}LCD_CONTROLLER_TypeDef; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_Defines STM32412G Discovery Low Level Private Def - * @{ - */ -/** - * @brief STM32412G DISCOVERY BSP Driver version number V2.0.3 - */ -#define __STM32412G_DISCOVERY_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32412G_DISCOVERY_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM32412G_DISCOVERY_BSP_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */ -#define __STM32412G_DISCOVERY_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32412G_DISCOVERY_BSP_VERSION ((__STM32412G_DISCOVERY_BSP_VERSION_MAIN << 24)\ - |(__STM32412G_DISCOVERY_BSP_VERSION_SUB1 << 16)\ - |(__STM32412G_DISCOVERY_BSP_VERSION_SUB2 << 8 )\ - |(__STM32412G_DISCOVERY_BSP_VERSION_RC)) - -/* We use BANK1 as we use FMC_NE1 signal */ -#define FMC_BANK1_BASE ((uint32_t)(0x60000000 | 0x00000000)) -#define FMC_BANK3_BASE ((uint32_t)(0x60000000 | 0x08000000)) -#define FMC_BANK1 ((LCD_CONTROLLER_TypeDef *) FMC_BANK1_BASE) - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_Variables STM32412G Discovery Low Level Variables - * @{ - */ - -const uint32_t GPIO_PIN[LEDn] = {LED1_PIN, - LED2_PIN, - LED3_PIN, - LED4_PIN}; - - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT}; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN}; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn}; - -GPIO_TypeDef* JOY_PORT[JOYn] = {SEL_JOY_GPIO_PORT, - DOWN_JOY_GPIO_PORT, - LEFT_JOY_GPIO_PORT, - RIGHT_JOY_GPIO_PORT, - UP_JOY_GPIO_PORT}; - -const uint16_t JOY_PIN[JOYn] = {SEL_JOY_PIN, - DOWN_JOY_PIN, - LEFT_JOY_PIN, - RIGHT_JOY_PIN, - UP_JOY_PIN}; - -const uint8_t JOY_IRQn[JOYn] = {SEL_JOY_EXTI_IRQn, - DOWN_JOY_EXTI_IRQn, - LEFT_JOY_EXTI_IRQn, - RIGHT_JOY_EXTI_IRQn, - UP_JOY_EXTI_IRQn}; - -USART_TypeDef* COM_USART[COMn] = {DISCOVERY_COM1}; - -GPIO_TypeDef* COM_TX_PORT[COMn] = {DISCOVERY_COM1_TX_GPIO_PORT}; - -GPIO_TypeDef* COM_RX_PORT[COMn] = {DISCOVERY_COM1_RX_GPIO_PORT}; - -const uint16_t COM_TX_PIN[COMn] = {DISCOVERY_COM1_TX_PIN}; - -const uint16_t COM_RX_PIN[COMn] = {DISCOVERY_COM1_RX_PIN}; - -const uint16_t COM_TX_AF[COMn] = {DISCOVERY_COM1_TX_AF}; - -const uint16_t COM_RX_AF[COMn] = {DISCOVERY_COM1_RX_AF}; - -static I2C_HandleTypeDef hI2cAudioHandler; -static I2C_HandleTypeDef hI2cExtHandler; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32412G Discovery Low Level Private Prototypes - * @{ - */ -static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler); -static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler); - -static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials); -static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr); - -static void FMC_BANK1_WriteData(uint16_t Data); -static void FMC_BANK1_WriteReg(uint8_t Reg); -static uint16_t FMC_BANK1_ReadData(void); -static void FMC_BANK1_Init(void); -static void FMC_BANK1_MspInit(void); - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteData(uint16_t RegValue); -void LCD_IO_WriteReg(uint8_t Reg); -void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size); -uint16_t LCD_IO_ReadData(void); -void LCD_IO_Delay(uint32_t Delay); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* I2C EEPROM IO function */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/* TouchScreen (TS) IO functions */ -void TS_IO_Init(void); -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_Delay(uint32_t Delay); - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_Functions STM32412G Discovery Low Level Private Functions - * @{ - */ - - /** - * @brief This method returns the STM32412G DISCOVERY BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM32412G_DISCOVERY_BSP_VERSION; -} - -/** - * @brief Configures LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the GPIO_LED clock */ - LEDx_GPIO_CLK_ENABLE(); - - /* Configure the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH; - - HAL_GPIO_Init(LEDx_GPIO_PORT, &gpio_init_structure); - - /* By default, turn off LED */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); -} - - -/** - * @brief DeInit LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - * @note Led DeInit does not disable the GPIO clock nor disable the Mfx - */ -void BSP_LED_DeInit(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Turn off LED */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); - /* DeInit the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - HAL_GPIO_DeInit(LEDx_GPIO_PORT, gpio_init_structure.Pin); -} - -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ - HAL_GPIO_TogglePin(LEDx_GPIO_PORT, GPIO_PIN[Led]); -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @param ButtonMode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - * @note On STM32412G-DISCOVERY board, the Wakeup button is mapped on - * the same push button which is the joystick selection button. - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the BUTTON clock */ - WAKEUP_BUTTON_GPIO_CLK_ENABLE(); - - if(ButtonMode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLDOWN; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - } - - if(ButtonMode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Pull = GPIO_PULLDOWN; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Push Button DeInit. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @note On STM32412G-DISCOVERY board, the Wakeup button is mapped on - * the same push button which is the joystick selection button. - * @note PB DeInit does not disable the GPIO clock - */ -void BSP_PB_DeInit(Button_TypeDef Button) -{ - GPIO_InitTypeDef gpio_init_structure; - - gpio_init_structure.Pin = BUTTON_PIN[Button]; - HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); -} - - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @note On STM32412G-DISCOVERY board, the Wakeup button is mapped on - * the same push button which is the joystick selection button. - * @retval The Button GPIO pin value (GPIO_PIN_RESET = button pressed) - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - - -/** - * @brief Configures all joystick's buttons in GPIO or EXTI modes. - * @param Joy_Mode: Joystick mode. - * This parameter can be one of the following values: - * JOY_MODE_GPIO: Joystick pins will be used as simple IOs - * JOY_MODE_EXTI: Joystick pins will be connected to EXTI line - * with interrupt generation capability - * @retval HAL_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode) -{ - JOYState_TypeDef joykey; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Initialized the Joystick. */ - for(joykey = JOY_SEL; joykey < (JOY_SEL + JOYn) ; joykey++) - { - /* Enable the JOY clock */ - JOYx_GPIO_CLK_ENABLE(joykey); - - GPIO_InitStruct.Pin = JOY_PIN[joykey]; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - - if (Joy_Mode == JOY_MODE_GPIO) - { - /* Configure Joy pin as input */ - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - HAL_GPIO_Init(JOY_PORT[joykey], &GPIO_InitStruct); - } - else if (Joy_Mode == JOY_MODE_EXTI) - { - /* Configure Joy pin as input with External interrupt */ - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - HAL_GPIO_Init(JOY_PORT[joykey], &GPIO_InitStruct); - - /* Enable and set Joy EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(JOY_IRQn[joykey]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(JOY_IRQn[joykey])); - } - } - - return HAL_OK; -} - -/** - * @brief Unconfigures all GPIOs used as joystick's buttons. - */ -void BSP_JOY_DeInit(void) -{ - JOYState_TypeDef joykey; - - /* Initialized the Joystick. */ - for(joykey = JOY_SEL; joykey < (JOY_SEL + JOYn) ; joykey++) - { - /* Enable the JOY clock */ - JOYx_GPIO_CLK_ENABLE(joykey); - - HAL_GPIO_DeInit(JOY_PORT[joykey], JOY_PIN[joykey]); - } -} - -/** -* @brief Returns the current joystick status. -* @retval Code of the joystick key pressed -* This code can be one of the following values: -* @arg JOY_NONE -* @arg JOY_SEL -* @arg JOY_DOWN -* @arg JOY_LEFT -* @arg JOY_RIGHT -* @arg JOY_UP -*/ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - JOYState_TypeDef joykey; - - for (joykey = JOY_SEL; joykey < (JOY_SEL + JOYn) ; joykey++) - { - if (HAL_GPIO_ReadPin(JOY_PORT[joykey], JOY_PIN[joykey]) != GPIO_PIN_RESET) - { - /* Return Code Joystick key pressed */ - return joykey; - } - } - - /* No Joystick key pressed */ - return JOY_NONE; -} - -/** - * @brief Configures COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIO clock */ - DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(COM); - DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(COM); - - /* Enable USART clock */ - DISCOVERY_COMx_CLK_ENABLE(COM); - - /* Configure USART Tx as alternate function */ - gpio_init_structure.Pin = COM_TX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Alternate = COM_TX_AF[COM]; - HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure); - - /* Configure USART Rx as alternate function */ - gpio_init_structure.Pin = COM_RX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Alternate = COM_RX_AF[COM]; - HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure); - - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief DeInit COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_DeInit(huart); - - /* Enable USART clock */ - DISCOVERY_COMx_CLK_DISABLE(COM); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes I2C MSP. - * @param i2c_handler : I2C handler - */ -static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler) -{ - GPIO_InitTypeDef gpio_init_structure; - - if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler)) - { - /* AUDIO I2C MSP init */ - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH; - gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN; - HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - DISCOVERY_AUDIO_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - DISCOVERY_AUDIO_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - DISCOVERY_AUDIO_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn); - } - else - { - /* External and Arduino connector I2C MSP init */ - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH; - gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_AF; - HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SDA_PIN; - gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SDA_AF; - HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - DISCOVERY_EXT_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - DISCOVERY_EXT_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - DISCOVERY_EXT_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_EV_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_ER_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_ER_IRQn); - } -} - - -/** - * @brief Initializes I2C HAL. - * @param i2c_handler : I2C handler - */ -static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler) -{ - if(HAL_I2C_GetState(i2c_handler) == HAL_I2C_STATE_RESET) - { - if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler)) - { - /* Audio and LCD I2C configuration */ - i2c_handler->Instance = DISCOVERY_AUDIO_I2Cx; - } - else - { - /* External, EEPROM and Arduino connector I2C configuration */ - i2c_handler->Instance = DISCOVERY_EXT_I2Cx; - } - i2c_handler->Init.ClockSpeed = DISCOVERY_I2C_SPEED; - i2c_handler->Init.DutyCycle = I2C_DUTYCYCLE_2; - i2c_handler->Init.OwnAddress1 = 0; - i2c_handler->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - i2c_handler->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; - i2c_handler->Init.OwnAddress2 = 0; - i2c_handler->Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; - i2c_handler->Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; - - /* Init the I2C */ - I2Cx_MspInit(i2c_handler); - HAL_I2C_Init(i2c_handler); - } -} - -/** - * @brief Reads multiple data. - * @param i2c_handler : I2C handler - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress: Memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler, - uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(i2c_handler, Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param i2c_handler : I2C handler - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress: Memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler, - uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initialize the I2C Bus */ - I2Cx_Error(i2c_handler, Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param i2c_handler : I2C handler - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(i2c_handler, DevAddress, Trials, 1000)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param i2c_handler : I2C handler - * @param Addr: I2C Address - */ -static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr) -{ - /* De-initialize the I2C communication bus */ - HAL_I2C_DeInit(i2c_handler); - - /* Re-Initialize the I2C communication bus */ - I2Cx_Init(i2c_handler); -} - -/** - * @brief Deinitializes I2C interface - * @param i2c_handler : I2C handler - */ - static void I2Cx_DeInit(I2C_HandleTypeDef *i2c_handler) -{ - if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler)) - { - /* Audio and LCD I2C configuration */ - i2c_handler->Instance = DISCOVERY_AUDIO_I2Cx; - } - else - { - /* External, EEPROM and Arduino connector I2C configuration */ - i2c_handler->Instance = DISCOVERY_EXT_I2Cx; - } - - /* Disable I2C block */ - __HAL_I2C_DISABLE(i2c_handler); - - /* DeInit the I2S */ - HAL_I2C_DeInit(i2c_handler); -} - -/*************************** FMC Routines ************************************/ -/** - * @brief Initializes FMC_BANK1 MSP. - */ -static void FMC_BANK1_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable FSMC clock */ - __HAL_RCC_FSMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FSMC; - - /* GPIOD configuration */ /* GPIO_PIN_7 is FMC_NE1 */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15 | GPIO_PIN_7; - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 |GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 ; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); -} - - -/** - * @brief Initializes LCD IO. - */ -static void FMC_BANK1_Init(void) -{ - SRAM_HandleTypeDef hsram; - FMC_NORSRAM_TimingTypeDef sram_timing; - FMC_NORSRAM_TimingTypeDef sram_timing_write; - - /*** Configure the SRAM Bank 1 ***/ - /* Configure IPs */ - hsram.Instance = FSMC_NORSRAM_DEVICE; - hsram.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - - /* Timing for READING */ - sram_timing.AddressSetupTime = 9; - sram_timing.AddressHoldTime = 1; - sram_timing.DataSetupTime = 36; - sram_timing.BusTurnAroundDuration = 1; - sram_timing.CLKDivision = 2; - sram_timing.DataLatency = 2; - sram_timing.AccessMode = FSMC_ACCESS_MODE_A; - - /* Timing for WRITING*/ - sram_timing_write.AddressSetupTime = 1; - sram_timing_write.AddressHoldTime = 1; - sram_timing_write.DataSetupTime = 7; - sram_timing_write.BusTurnAroundDuration = 0; - sram_timing_write.CLKDivision = 2; - sram_timing_write.DataLatency = 2; - sram_timing_write.AccessMode = FSMC_ACCESS_MODE_A; - - hsram.Init.NSBank = FSMC_NORSRAM_BANK1; - hsram.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - hsram.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - hsram.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; - hsram.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; - hsram.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - hsram.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - hsram.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - hsram.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - hsram.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - hsram.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE; - hsram.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - hsram.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; - hsram.Init.WriteFifo = FSMC_WRITE_FIFO_DISABLE; - hsram.Init.PageSize = FSMC_PAGE_SIZE_NONE; - hsram.Init.ContinuousClock = FSMC_CONTINUOUS_CLOCK_SYNC_ONLY; - - /* Initialize the SRAM controller */ - FMC_BANK1_MspInit(); - HAL_SRAM_Init(&hsram, &sram_timing, &sram_timing_write); -} - -/** - * @brief Writes register value. - * @param Data: Data to be written - */ -static void FMC_BANK1_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FMC_BANK1->RAM = Data; - __DSB(); -} - -/** - * @brief Writes register address. - * @param Reg: Register to be written - */ -static void FMC_BANK1_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then write register */ - FMC_BANK1->REG = Reg; - __DSB(); -} - -/** - * @brief Reads register value. - * @retval Read value - */ -static uint16_t FMC_BANK1_ReadData(void) -{ - return FMC_BANK1->RAM; -} - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/********************************* LINK LCD ***********************************/ - -/** - * @brief Initializes LCD low level. - */ -void LCD_IO_Init(void) -{ - FMC_BANK1_Init(); -} - -/** - * @brief Writes data on LCD data register. - * @param RegValue: Data to be written - */ -void LCD_IO_WriteData(uint16_t RegValue) -{ - /* Write 16-bit Reg */ - FMC_BANK1_WriteData(RegValue); -} - -/** - * @brief Writes several data on LCD data register. - * @param pData: pointer on data to be written - * @param Size: data amount in 16bits short unit - */ -void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size) -{ - uint32_t i; - - for (i = 0; i < Size; i++) - { - FMC_BANK1_WriteData(pData[i]); - } -} - -/** - * @brief Writes register on LCD register. - * @param Reg: Register to be written - */ -void LCD_IO_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then Write Reg */ - FMC_BANK1_WriteReg(Reg); -} - -/** - * @brief Reads data from LCD data register. - * @retval Read data. - */ -uint16_t LCD_IO_ReadData(void) -{ - return FMC_BANK1_ReadData(); -} - -/** - * @brief LCD delay - * @param Delay: Delay in ms - */ -void LCD_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2Cx_Init(&hI2cAudioHandler); -} - -/** - * @brief Deinitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - I2Cx_DeInit(&hI2cAudioHandler); -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - - I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - - read_value = tmp; - - return read_value; -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(&hI2cExtHandler); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Read data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(&hI2cExtHandler, DevAddress, Trials)); -} - -/************************** LINK TS (TouchScreen) *****************************/ -/** - * @brief Initializes Touchscreen low level. - */ -void TS_IO_Init(void) -{ - I2Cx_Init(&hI2cAudioHandler); -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) -{ - uint8_t read_value = 0; - - I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); - - return read_value; -} - -/** - * @brief Reads multiple data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval HAL status - */ -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Writes multiple data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Delay function used in TouchScreen low level driver. - * @param Delay: Delay in ms - */ -void TS_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.h deleted file mode 100644 index 99d4127730..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery.h +++ /dev/null @@ -1,395 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32412G_DISCOVERY's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* IMPORTANT: One of the following flags must be defined in the preprocessor */ -/* options in order to select the target board revision: !!!!!!!!!! */ -/* USE_STM32412G_DISCOVERY */ /* Applicable for all boards execept STM32412G DISCOVERY REVD */ -/* USE_STM32412G_DISCOVERY_REVD */ /* Applicable only for STM32412G DISCOVERY REVD */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_H -#define __STM32412G_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Exported_Types STM32412G DISCOVERY Low Level Exported Types - * @{ - */ -typedef enum -{ -LED1 = 0, -LED_GREEN = LED1, -LED2 = 1, -LED_ORANGE = LED2, -LED3 = 2, -LED_RED = LED3, -LED4 = 3, -LED_BLUE = LED4 -}Led_TypeDef; - - -typedef enum -{ - BUTTON_WAKEUP = 0 -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - JOY_MODE_GPIO = 0, - JOY_MODE_EXTI = 1 -}JOYMode_TypeDef; - -typedef enum -{ - JOY_SEL = 0, - JOY_DOWN = 1, - JOY_LEFT = 2, - JOY_RIGHT = 3, - JOY_UP = 4, - JOY_NONE = 5 -}JOYState_TypeDef; - -typedef enum -{ - COM1 = 0 -}COM_TypeDef; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Exported_Constants STM32412G DISCOVERY Low Level Exported Constants - * @{ - */ - -/** - * @brief Define for STM32412G_DISCOVERY board - */ -#if !defined(USE_STM32412G_DISCOVERY_REVD) && \ - !defined(USE_STM32412G_DISCOVERY) -#define USE_STM32412G_DISCOVERY -#endif - -/** @addtogroup STM32412G_DISCOVERY_LOW_LEVEL_LED STM32412G DISCOVERY Low Level Led - * @{ - */ -#define LEDn ((uint8_t)4) - -#define LEDx_GPIO_PORT GPIOE -#define LEDx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define LEDx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() -#define LED1_PIN GPIO_PIN_0 -#define LED2_PIN GPIO_PIN_1 -#define LED3_PIN GPIO_PIN_2 -#define LED4_PIN GPIO_PIN_3 - -/** - * @} - */ - -/** @addtogroup STM32412G_DISCOVERY_LOW_LEVEL_BUTTON STM32412G DISCOVERY Low Level Button - * @{ - */ -/* Push buttons (wakeup) mapped on joystick middle select button */ -#define BUTTONn ((uint8_t)1) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -#define JOYn ((uint8_t)5) - -/** -* @brief Joystick Left push-button -*/ -#define LEFT_JOY_PIN GPIO_PIN_15 /* PF.15 */ -#define LEFT_JOY_GPIO_PORT GPIOF -#define LEFT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define LEFT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define LEFT_JOY_EXTI_IRQn EXTI15_10_IRQn - -/** -* @brief Joystick Down push-button -*/ -#define DOWN_JOY_PIN GPIO_PIN_1 /* PG.01 */ -#define DOWN_JOY_GPIO_PORT GPIOG -#define DOWN_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define DOWN_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define DOWN_JOY_EXTI_IRQn EXTI1_IRQn - -/** -* @brief Joystick Up push-button -*/ -#define UP_JOY_PIN GPIO_PIN_0 /* PG.00 */ -#define UP_JOY_GPIO_PORT GPIOG -#define UP_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define UP_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define UP_JOY_EXTI_IRQn EXTI0_IRQn - -/** - * @brief Joystick Right push-button - */ -#define RIGHT_JOY_PIN GPIO_PIN_14 /* PF.14 */ -#define RIGHT_JOY_GPIO_PORT GPIOF -#define RIGHT_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define RIGHT_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define RIGHT_JOY_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Joystick Selection push-button - */ -#define SEL_JOY_PIN GPIO_PIN_0 /* PA.00 */ -#define SEL_JOY_GPIO_PORT GPIOA -#define SEL_JOY_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define SEL_JOY_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define SEL_JOY_EXTI_IRQn EXTI0_IRQn - -#define JOYx_GPIO_CLK_ENABLE(__JOY__) do { if((__JOY__) == JOY_SEL) { SEL_JOY_GPIO_CLK_ENABLE(); } else \ - if((__JOY__) == JOY_DOWN) { DOWN_JOY_GPIO_CLK_ENABLE(); } else \ - if((__JOY__) == JOY_LEFT) { LEFT_JOY_GPIO_CLK_ENABLE(); } else \ - if((__JOY__) == JOY_RIGHT) { RIGHT_JOY_GPIO_CLK_ENABLE(); } else \ - if((__JOY__) == JOY_UP) { UP_JOY_GPIO_CLK_ENABLE(); } } while(0) - -#define JOYx_GPIO_CLK_DISABLE(__JOY__) do { if((__JOY__) == JOY_SEL) { SEL_JOY_GPIO_CLK_DISABLE(); } else \ - if((__JOY__) == JOY_DOWN) { DOWN_JOY_GPIO_CLK_DISABLE(); } else \ - if((__JOY__) == JOY_LEFT) { LEFT_JOY_GPIO_CLK_DISABLE(); } else \ - if((__JOY__) == JOY_RIGHT) { RIGHT_JOY_GPIO_CLK_DISABLE(); } else \ - if((__JOY__) == JOY_UP) { UP_JOY_GPIO_CLK_DISABLE(); } } while(0) - -#define JOY_ALL_PINS (RIGHT_JOY_PIN | LEFT_JOY_PIN | UP_JOY_PIN | DOWN_JOY_PIN | SEL_JOY_PIN) - -/** - * @} - */ - -/** @addtogroup STM32412G_DISCOVERY_LOW_LEVEL_SIGNAL - * @{ - */ -#define SIGNALn ((uint8_t)2) - -/** - * @brief SD-detect signal - */ -#define SD_DETECT_PIN GPIO_PIN_3 -#define SD_DETECT_GPIO_PORT GPIOD -#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define SD_DETECT_EXTI_IRQn EXTI3_IRQn - - -/** - * @brief Tamper input TAMP1 - */ -#define TAMPER_TAMP1_PIN GPIO_PIN_13 -#define TAMPER_TAMP1_GPIO_PORT GPIOC -#define TAMPER_TAMP1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TAMPER_TAMP1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TAMPER_TAMP1_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief TS INT pin - */ -#define TS_INT_PIN GPIO_PIN_5 -#define TS_INT_GPIO_PORT GPIOG -#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define TS_INT_EXTI_IRQn EXTI9_5_IRQn - -/** - * @brief TS RST pin - */ -#define TS_RST_PIN GPIO_PIN_12 -#define TS_RST_GPIO_PORT GPIOF -#define TS_RST_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define TS_RST_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define TS_RST_EXTI_IRQn EXTI15_10_IRQn - -/** - * @} - */ - -/** @addtogroup STM32412G_DISCOVERY_LOW_LEVEL_COM STM32412G DISCOVERY Low Level COM - * @{ - */ -#define COMn ((uint8_t)1) - -/** - * @brief Definition for COM port1, connected to USART2 - */ -#define DISCOVERY_COM1 USART2 -#define DISCOVERY_COM1_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() -#define DISCOVERY_COM1_CLK_DISABLE() __HAL_RCC_USART2_CLK_DISABLE() - -#define DISCOVERY_COM1_TX_PIN GPIO_PIN_2 -#define DISCOVERY_COM1_TX_GPIO_PORT GPIOA -#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define DISCOVERY_COM1_TX_AF GPIO_AF7_USART2 - -#define DISCOVERY_COM1_RX_PIN GPIO_PIN_3 -#define DISCOVERY_COM1_RX_GPIO_PORT GPIOA -#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define DISCOVERY_COM1_RX_AF GPIO_AF7_USART2 - -#define DISCOVERY_COM1_IRQn USART2_IRQn - -#define DISCOVERY_COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_CLK_DISABLE() : 0) - -#define DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_TX_GPIO_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() : 0) - -#define DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_RX_GPIO_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() : 0) - -/** - * @brief Joystick Pins definition - */ - - -/* Exported constant IO ------------------------------------------------------*/ - -#define AUDIO_I2C_ADDRESS ((uint16_t)0x34) -#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) -#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) -#define TS_I2C_ADDRESS ((uint16_t)0x70) - -/* User can use this section to tailor I2Cx/I2Cx instance used and associated - resources */ -/* Definition for AUDIO I2Cx resources */ -#define DISCOVERY_AUDIO_I2Cx I2C1 -#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define DISCOVERY_AUDIO_I2Cx_SCL_PIN GPIO_PIN_6 -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT GPIOB -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1 -#define DISCOVERY_AUDIO_I2Cx_SDA_PIN GPIO_PIN_7 - -/* I2C interrupt requests */ -#define DISCOVERY_AUDIO_I2Cx_EV_IRQn I2C1_EV_IRQn -#define DISCOVERY_AUDIO_I2Cx_ER_IRQn I2C1_ER_IRQn - -/* Definition for external, camera and Arduino connector I2Cx resources */ -#define DISCOVERY_EXT_I2Cx I2C2 -#define DISCOVERY_EXT_I2Cx_CLK_ENABLE() __HAL_RCC_I2C2_CLK_ENABLE() -#define DISCOVERY_EXT_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define DISCOVERY_EXT_I2Cx_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() -#define DISCOVERY_EXT_I2Cx_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define DISCOVERY_EXT_I2Cx_SCL_PIN GPIO_PIN_10 -#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT GPIOB -#define DISCOVERY_EXT_I2Cx_SCL_AF GPIO_AF4_I2C2 -#define DISCOVERY_EXT_I2Cx_SDA_AF GPIO_AF9_I2C2 -#define DISCOVERY_EXT_I2Cx_SDA_PIN GPIO_PIN_9 - -/* I2C interrupt requests */ -#define DISCOVERY_EXT_I2Cx_EV_IRQn I2C2_EV_IRQn -#define DISCOVERY_EXT_I2Cx_ER_IRQn I2C2_ER_IRQn - -/* I2C clock speed configuration (in Hz) - WARNING: - Make sure that this define is not already declared in other files. - It can be used in parallel by other modules. */ -#ifndef DISCOVERY_I2C_SPEED - #define DISCOVERY_I2C_SPEED 100000 -#endif /* DISCOVERY_I2C_SPEED */ - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Exported_Functions STM32412G DISCOVERY Low Level Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode); -void BSP_JOY_DeInit(void); -JOYState_TypeDef BSP_JOY_GetState(void); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart); -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_H */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.c deleted file mode 100644 index 2ee358bc00..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.c +++ /dev/null @@ -1,1925 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32412G-DISCOVERY board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM32412G-DISCOVERY boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER : only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm32412g_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetOutputMode(), BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the stm32412g_discovery_audio.h file. - - -Driver architecture: --------------------- - + This driver provides the High Audio Layer: consists of the function API exported in the stm32412g_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32412g_discovery_audio.c file (I2Sx_Out_Init(), I2Sx_Out_DeInit(), I2Sx_In_Init() and I2Sx_In_DeInit()) - -Known Limitations: ------------------- - 1- If the TDM Format used to play in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO STM32412G-DISCOVERY AUDIO - * @brief This file includes the low layer driver for wm8994 Audio Codec - * available on STM32412G-DISCOVERY board(MB1209). - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Private_Types STM32412G Discovery Audio Private Types - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Private_Defines STM32412G Discovery Audio Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Private_Macros STM32412G Discovery Audio Private macros - * @{ - */ - -#define DFSDM_OVER_SAMPLING(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 256 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 256 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 128 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 128 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 64 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 64 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 32 : 25 \ - -#define DFSDM_CLOCK_DIVIDER(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 32 : 72 \ - -#define DFSDM_FILTER_ORDER(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? DFSDM_FILTER_SINC4_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? DFSDM_FILTER_SINC4_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? DFSDM_FILTER_SINC4_ORDER : DFSDM_FILTER_SINC4_ORDER \ - -#define DFSDM_MIC_BIT_SHIFT(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 5 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 4 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 2 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 2 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 5 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 6 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 2 : 0 \ - -/* Saturate the record PCM sample */ -#define SaturaLH(N, L, H) (((N)<(L))?(L):(((N)>(H))?(H):(N))) - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Private_Variables STM32412G Discovery Audio Private Variables - * @{ - */ - -AUDIO_DrvTypeDef *audio_drv; -I2S_HandleTypeDef haudio_i2s; /* for Audio_OUT and Audio_IN_analog mic */ -I2S_HandleTypeDef haudio_in_i2sext; /* for Analog mic with full duplex mode */ -AUDIOIN_ContextTypeDef hAudioIn; - -DFSDM_Channel_HandleTypeDef hAudioInDfsdmChannel[DFSDM_MIC_NUMBER]; /* 2 DFSDM channel handle used for all microphones */ -DFSDM_Filter_HandleTypeDef hAudioInDfsdmFilter[DFSDM_MIC_NUMBER]; /* 2 DFSDM filter handle */ -DMA_HandleTypeDef hDmaDfsdm[DFSDM_MIC_NUMBER]; /* 2 DMA handle used for DFSDM regular conversions */ - -/* Buffers for right and left samples */ -int32_t *pScratchBuff[DEFAULT_AUDIO_IN_CHANNEL_NBR]; -int32_t ScratchSize; - -uint32_t DmaRecHalfBuffCplt[DFSDM_MIC_NUMBER] = {0}; -uint32_t DmaRecBuffCplt[DFSDM_MIC_NUMBER] = {0}; - -/* Application Buffer Trigger */ -__IO uint32_t AppBuffTrigger = 0; -__IO uint32_t AppBuffHalf = 0; -__IO uint32_t MicBuff[DFSDM_MIC_NUMBER] = {0}; -__IO uint16_t AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Private_Function_Prototypes STM32412G Discovery Audio Private Prototypes - * @{ - */ -static void I2Sx_In_Init(uint32_t AudioFreq); -static void I2Sx_In_DeInit(void); -static void I2Sx_In_MspInit(void); -static void I2Sx_In_MspDeInit(void); - -static void I2Sx_Out_Init(uint32_t AudioFreq); -static void I2Sx_Out_DeInit(void); - -static uint8_t DFSDMx_DeInit(void); -static void DFSDMx_ChannelMspInit(void); -static void DFSDMx_ChannelMspDeInit(void); -static void DFSDMx_FilterMspInit(void); -static void DFSDMx_FilterMspDeInit(void); - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_OUT_Private_Functions STM32412G Discovery Audio Out Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The I2S PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - uint32_t deviceid = 0x00; - uint16_t buffer_fake[16] = {0x00}; - - I2Sx_Out_DeInit(); - AUDIO_IO_DeInit(); - - /* PLL clock is set depending on the AudioFreq (44.1 kHz vs 48kHz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* Configure the I2S peripheral */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL); - } - I2Sx_Out_Init(AudioFreq); - - AUDIO_IO_Init(); - - /* wm8994 codec initialization */ - deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS); - - if(deviceid == WM8994_ID) - { - /* Reset the Codec Registers */ - wm8994_drv.Reset(AUDIO_I2C_ADDRESS); - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Send fake I2S data in order to generate MCLK needed by WM8994 to set its registers - * MCLK is generated only when a data stream is sent on I2S */ - HAL_I2S_Transmit_DMA(&haudio_i2s, buffer_fake, 16); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - /* Stop sending fake I2S data */ - HAL_I2S_DMAStop(&haudio_i2s); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&haudio_i2s, pBuffer, DMA_MAX(Size / AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: pointer on data address - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&haudio_i2s, pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief This function Resumes the audio file stream. - * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Media layer pause/resume function */ - /* DMA stream resumed before accessing WM8994 register as WM8994 needs the MCLK to be generated to access its registers - * MCLK is generated only when a data stream is sent on I2S */ - HAL_I2S_DMAResume(&haudio_i2s); - - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_I2S_DMAStop(&haudio_i2s); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(1); - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* Disable I2S peripheral to allow access to I2S internal registers */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* Update the I2S audio frequency configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - HAL_I2S_Init(&haudio_i2s); - - /* Enable I2S peripheral to generate MCLK */ - __HAL_I2S_ENABLE(&haudio_i2s); -} - -/** - * @brief Deinit the audio peripherals. - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - I2Sx_Out_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspDeInit(&haudio_i2s, NULL); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32412g_discovery_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32412g_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2s_tx; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable I2S clock */ - AUDIO_OUT_I2Sx_CLK_ENABLE(); - - /* Enable MCK, SCK, WS, SD and CODEC_INT GPIO clock */ - AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_SCK_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_WS_GPIO_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: MCK, SCK, WS and SD pins */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_MCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SCK_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_WS_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_WS_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_WS_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SD_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_OUT_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_OUT_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_tx.Init.Channel = AUDIO_OUT_I2Sx_DMAx_CHANNEL; - hdma_i2s_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2s_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_tx.Init.PeriphDataAlignment = AUDIO_OUT_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_tx.Init.MemDataAlignment = AUDIO_OUT_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_tx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_tx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_tx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_tx.Instance = AUDIO_OUT_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2s_tx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_tx); - } - - /* Enable and set I2Sx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(SPI3_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(SPI3_IRQn); - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_OUT_I2Sx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_OUT_I2Sx_DMAx_IRQ); -} - -/** - * @brief Deinitializes I2S MSP. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @param hi2s: I2S handle - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_OUT_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_OUT_I2Sx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hi2s->hdmatx); - } - - /* Disable I2S peripheral */ - __HAL_I2S_DISABLE(hi2s); - - /* Deactives CODEC_I2S pins MCK, SCK, WS and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_WS_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_WS_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_OUT_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 271; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else if(AudioFreq == AUDIO_FREQUENCY_96K) /* AUDIO_FREQUENCY_96K */ - { - /* I2S clock config */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K */ - { - /* I2S clock config - PLLI2S_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SR = 344/7 = 49.142 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVR = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S; - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 7; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Out_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* I2S peripheral configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - haudio_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX; - haudio_i2s.Init.Standard = I2S_STANDARD_PHILIPS; - haudio_i2s.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_i2s); - - /* Enable I2S block */ - __HAL_I2S_ENABLE(&haudio_i2s); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_Out_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_i2s); -} - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_IN_Private_Functions STM32412G Discovery Audio In Private functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @note This function assumes that the I2S input clock - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio bit resolustion. - * @param ChnlNbr: Audio channel number. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - return BSP_AUDIO_IN_InitEx(INPUT_DEVICE_DIGITAL_MIC, AudioFreq, BitRes, ChnlNbr); -} - -/** - * @brief Initializes wave recording. - * @param InputDevice: input device digital or analog - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio bit resolution. - * @param ChnlNbr: Audio channel number. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_InitEx(uint32_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - uint32_t ret = AUDIO_ERROR; - uint32_t i = 0; - uint32_t mic_enabled = 0; - uint16_t buffer_fake[16] = {0x00}; - - /* Store the audio record context */ - hAudioIn.Frequency = AudioFreq; - hAudioIn.BitResolution = BitRes; - hAudioIn.InputDevice = InputDevice; - hAudioIn.ChannelNbr = ChnlNbr; - - /* Store the total number of microphones enabled */ - for(i = 0; i < DFSDM_MIC_NUMBER; i ++) - { - if(((hAudioIn.InputDevice >> i) & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) - { - mic_enabled++; - } - } - - if (InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - InputDevice = INPUT_DEVICE_INPUT_LINE_1; - /* INPUT_DEVICE_ANALOG_MIC */ - /* Disable I2S */ - I2Sx_In_DeInit(); - - /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_IN_ClockConfig(AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT for analog mic */ - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from I2S peripheral to memory */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET) - { - BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL); /* Initialize GPIOs for SPI3 Master signals */ - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_IN_MspInit(NULL); - } - - /* Configure I2S */ - I2Sx_In_Init(AudioFreq); - - AUDIO_IO_Init(); - - /* wm8994 codec initialization */ - if((wm8994_drv.ReadID(AUDIO_I2C_ADDRESS)) == WM8994_ID) - { - /* Reset the Codec Registers */ - wm8994_drv.Reset(AUDIO_I2C_ADDRESS); - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Receive fake I2S data in order to generate MCLK needed by WM8994 to set its registers */ - HAL_I2S_Receive_DMA(&haudio_i2s, buffer_fake, 16); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, (OUTPUT_DEVICE_HEADPHONE|InputDevice), 100, AudioFreq); - /* Stop receiving fake I2S data */ - HAL_I2S_DMAStop(&haudio_i2s); - } - } - else - { - if(hAudioIn.ChannelNbr != mic_enabled) - { - return AUDIO_ERROR; - } - else - { - /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_IN_ClockConfig(AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT for analog mic */ - - /* Init the DFSDM MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_IN_MspInit(NULL); - - /* Default configuration of DFSDM filters and channels */ - ret = BSP_AUDIO_IN_ConfigDigitalMic(hAudioIn.InputDevice, NULL); - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief DeInitializes the audio peripheral. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - if(hAudioIn.InputDevice != INPUT_DEVICE_ANALOG_MIC) - { - /* MSP filters/channels initialization */ - BSP_AUDIO_IN_MspDeInit(NULL); - - DFSDMx_DeInit(); - } - else - { - I2Sx_In_DeInit(); - } -} - -/** - * @brief Initializes default configuration of the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @param InputDevice: The microphone to be configured. Can be INPUT_DEVICE_DIGITAL_MIC1..INPUT_DEVICE_DIGITAL_MIC5 - * @note Channel output Clock Divider and Filter Oversampling are calculated as follow: - * - Clock_Divider = CLK(input DFSDM)/CLK(micro) with - * 1MHZ < CLK(micro) < 3.2MHZ (TYP 2.4MHZ for MP34DT01TR) - * - Oversampling = CLK(input DFSDM)/(Clock_Divider * AudioFreq) - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_ConfigMicDefault(uint32_t InputDevice) -{ - uint32_t i = 0, mic_init[DFSDM_MIC_NUMBER] = {0}; - uint32_t filter_ch = 0, mic_num = 0; - - DFSDM_Filter_TypeDef* FilterInstnace[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_FILTER, AUDIO_DFSDMx_MIC2_FILTER}; - DFSDM_Channel_TypeDef* ChannelInstnace[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_CHANNEL, AUDIO_DFSDMx_MIC2_CHANNEL}; - uint32_t DigitalMicPins[DFSDM_MIC_NUMBER] = {DFSDM_CHANNEL_SAME_CHANNEL_PINS, DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS}; - uint32_t DigitalMicType[DFSDM_MIC_NUMBER] = {DFSDM_CHANNEL_SPI_RISING, DFSDM_CHANNEL_SPI_FALLING}; - uint32_t Channel4Filter[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_CHANNEL_FOR_FILTER, AUDIO_DFSDMx_MIC2_CHANNEL_FOR_FILTER}; - - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC1); - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC2); - } - - mic_init[mic_num] = 1; - - HAL_DFSDM_FilterDeInit(&hAudioInDfsdmFilter[mic_num]); - /* MIC filters initialization */ - __HAL_DFSDM_FILTER_RESET_HANDLE_STATE(&hAudioInDfsdmFilter[mic_num]); - hAudioInDfsdmFilter[mic_num].Instance = FilterInstnace[mic_num]; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.Trigger = DFSDM_FILTER_SW_TRIGGER; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.FastMode = ENABLE; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.DmaMode = ENABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.Trigger = DFSDM_FILTER_SW_TRIGGER; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ScanMode = DISABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.DmaMode = DISABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ExtTrigger = DFSDM_FILTER_EXT_TRIG_TIM8_TRGO; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ExtTriggerEdge = DFSDM_FILTER_EXT_TRIG_BOTH_EDGES; - hAudioInDfsdmFilter[mic_num].Init.FilterParam.SincOrder = DFSDM_FILTER_ORDER(hAudioIn.Frequency); - hAudioInDfsdmFilter[mic_num].Init.FilterParam.Oversampling = DFSDM_OVER_SAMPLING(hAudioIn.Frequency); - hAudioInDfsdmFilter[mic_num].Init.FilterParam.IntOversampling = 1; - - if(HAL_OK != HAL_DFSDM_FilterInit(&hAudioInDfsdmFilter[mic_num])) - { - return AUDIO_ERROR; - } - - HAL_DFSDM_ChannelDeInit(&hAudioInDfsdmChannel[mic_num]); - /* MIC channels initialization */ - __HAL_DFSDM_CHANNEL_RESET_HANDLE_STATE(&hAudioInDfsdmChannel[mic_num]); - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Activation = ENABLE; - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_AUDIO; - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Divider = DFSDM_CLOCK_DIVIDER(hAudioIn.Frequency); - hAudioInDfsdmChannel[mic_num].Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS; - hAudioInDfsdmChannel[mic_num].Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE; - hAudioInDfsdmChannel[mic_num].Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL; - hAudioInDfsdmChannel[mic_num].Init.Awd.FilterOrder = DFSDM_CHANNEL_SINC1_ORDER; - hAudioInDfsdmChannel[mic_num].Init.Awd.Oversampling = 10; - hAudioInDfsdmChannel[mic_num].Init.Offset = 0; - hAudioInDfsdmChannel[mic_num].Init.RightBitShift = DFSDM_MIC_BIT_SHIFT(hAudioIn.Frequency); - hAudioInDfsdmChannel[mic_num].Instance = ChannelInstnace[mic_num]; - hAudioInDfsdmChannel[mic_num].Init.Input.Pins = DigitalMicPins[mic_num]; - hAudioInDfsdmChannel[mic_num].Init.SerialInterface.Type = DigitalMicType[mic_num]; - - if(HAL_OK != HAL_DFSDM_ChannelInit(&hAudioInDfsdmChannel[mic_num])) - { - return AUDIO_ERROR; - } - - filter_ch = Channel4Filter[mic_num]; - /* Configure injected channel */ - if(HAL_OK != HAL_DFSDM_FilterConfigRegChannel(&hAudioInDfsdmFilter[mic_num], filter_ch, DFSDM_CONTINUOUS_CONV_ON)) - { - return AUDIO_ERROR; - } - } - - return AUDIO_OK; -} - -/** - * @brief Initializes the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @param InputDevice: The microphone to be configured. Can be INPUT_DEVICE_DIGITAL_MIC1..INPUT_DEVICE_DIGITAL_MIC5 - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -__weak uint8_t BSP_AUDIO_IN_ConfigDigitalMic(uint32_t InputDevice, void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Default configuration of DFSDM filters and channels */ - return(BSP_AUDIO_IN_ConfigMicDefault(InputDevice)); - /* Note: This function can be called at application level and default configuration - can be overwritten to fit user's need */ -} - -/** - * @brief Allocate channel buffer scratch - * @param pScratch : pointer to scratch tables. - * @param size of scratch buffer - */ -uint8_t BSP_AUDIO_IN_AllocScratch (int32_t *pScratch, uint32_t size) -{ - uint32_t idx; - - ScratchSize = size / DEFAULT_AUDIO_IN_CHANNEL_NBR; - - /* copy scratch pointers */ - for (idx = 0; idx < DEFAULT_AUDIO_IN_CHANNEL_NBR ; idx++) - { - pScratchBuff[idx] = (int32_t *)(pScratch + idx * ScratchSize); - } - /* Return AUDIO_OK */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t *pBuf, uint32_t size) -{ - hAudioIn.pRecBuf = pBuf; - hAudioIn.RecSize = size; - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - if (hAudioIn.InputDevice == INPUT_DEVICE_DIGITAL_MIC) - { - /* Call the Media layer start function for MIC1 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], ScratchSize)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer start function for MIC2 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], ScratchSize)) - { - return AUDIO_ERROR; - } - } - else - { - /* Start the process to receive the DMA */ - if (HAL_OK != HAL_I2SEx_TransmitReceive_DMA(&haudio_i2s, pBuf, pBuf, size)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_RecordEx(uint32_t *pBuf, uint32_t size) -{ - uint8_t ret = AUDIO_ERROR; - hAudioIn.RecSize = size; - uint32_t i = 0; - uint32_t mic_init[DFSDM_MIC_NUMBER] = {0}; - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return ret; - } - else - { - hAudioIn.MultiBuffMode = 1; - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - /* Call the Media layer start function for MIC1 channel 1 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - /* Call the Media layer start function for MIC2 channel 1 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - } - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Initializes the I2S MSP. - */ -static void I2Sx_In_MspInit(void) -{ - static DMA_HandleTypeDef hdma_i2s_rx; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable I2S clock */ - AUDIO_IN_I2Sx_CLK_ENABLE(); - - /* Enable MCK GPIO clock, needed by the codec */ - AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: MCK pins */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_MCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, &gpio_init_structure); - - /* Enable SD GPIO clock */ - AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_ENABLE(); - /* CODEC_I2S pin configuration: SD pin */ - gpio_init_structure.Pin = AUDIO_IN_I2Sx_EXT_SD_PIN; - gpio_init_structure.Alternate = AUDIO_IN_I2Sx_EXT_SD_AF; - HAL_GPIO_Init(AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_IN_I2Sx_DMAx_CLK_ENABLE(); - - if(haudio_i2s.Instance == AUDIO_IN_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_rx.Init.Channel = AUDIO_IN_I2Sx_DMAx_CHANNEL; - hdma_i2s_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_rx.Init.PeriphDataAlignment = AUDIO_IN_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_rx.Init.MemDataAlignment = AUDIO_IN_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_rx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_rx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_rx.Instance = AUDIO_IN_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(&haudio_i2s, hdmarx, hdma_i2s_rx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_rx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_IN_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_IN_I2Sx_DMAx_IRQ); -} - -/** - * @brief De-Initializes the I2S MSP. - */ -static void I2Sx_In_MspDeInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_IN_I2Sx_DMAx_IRQ); - - if(haudio_i2s.Instance == AUDIO_IN_I2Sx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(haudio_i2s.hdmarx); - } - - /* Disable I2S peripheral */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* Deactives CODEC_I2S pins MCK by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_IN_I2Sx_EXT_SD_PIN; - HAL_GPIO_DeInit(AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_IN_I2Sx_CLK_DISABLE(); -} - -/** - * @brief Initializes BSP_AUDIO_IN MSP. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(void *Params) -{ - if(hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - I2Sx_In_MspInit(); - } - else - { - /* MSP channels initialization */ - DFSDMx_ChannelMspInit(); - - /* MSP filters initialization */ - DFSDMx_FilterMspInit(); - } -} - -/** - * @brief De-Initializes BSP_AUDIO_IN MSP. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(void *Params) -{ - if(hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - I2Sx_In_MspDeInit(); - } - else - { - /* MSP channels initialization */ - DFSDMx_ChannelMspDeInit(); - - /* MSP filters initialization */ - DFSDMx_FilterMspDeInit(); - } -} - -/** - * @brief Clock Config. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @retval AUDIO_OK if correct communication, else wrong communication - */ -__weak uint8_t BSP_AUDIO_IN_ClockConfig(uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.DfsdmClockSelection = RCC_DFSDM1CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 271; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else if(AudioFreq == AUDIO_FREQUENCY_96K) - { - /* I2S clock config */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.DfsdmClockSelection = RCC_DFSDM1CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_32K, AUDIO_FREQUENCY_48K */ - { - /* I2S clock config - PLLI2S_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SR = 344/7 = 49.142 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVR = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.DfsdmClockSelection = RCC_DFSDM1CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 7; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - - if(hAudioIn.InputDevice != INPUT_DEVICE_ANALOG_MIC) - { - /* I2S_APB1 selected as DFSDM audio clock source */ - __HAL_RCC_DFSDM1AUDIO_CONFIG(RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1); - } - - return AUDIO_OK; -} - -/** - * @brief Regular conversion complete callback. - * @note In interrupt mode, user has to read conversion value in this function - using HAL_DFSDM_FilterGetRegularValue. - * @param hdfsdm_filter : DFSDM filter handle. - */ -void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) -{ - uint32_t index, input_device = 0; - - if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC1_FILTER) - { - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC1; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC2_FILTER) - { - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC2; - } - - if(hAudioIn.MultiBuffMode == 1) - { - BSP_AUDIO_IN_TransferComplete_CallBackEx(input_device); - } - else - { - if((DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] == 1) && (DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] == 1)) - { - if(AppBuffTrigger >= hAudioIn.RecSize) - AppBuffTrigger = 0; - - for(index = (ScratchSize/2) ; index < ScratchSize; index++) - { - hAudioIn.pRecBuf[AppBuffTrigger] = (uint16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)][index] >> 8), -32760, 32760)); - hAudioIn.pRecBuf[AppBuffTrigger + 1] = (uint16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)][index] >> 8), -32760, 32760)); - AppBuffTrigger += 2; - } - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 0; - } - - /* Update Trigger with Remaining Byte before callback if necessary */ - if(AppBuffTrigger >= hAudioIn.RecSize) - { - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); - } - else if((AppBuffTrigger >= hAudioIn.RecSize/2)) - { - if(AppBuffHalf == 0) - { - AppBuffHalf = 1; - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32l476g_eval_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); - } - } - } -} - -/** - * @brief Half regular conversion complete callback. - * @param hdfsdm_filter : DFSDM filter handle. - */ -void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) -{ - uint32_t index, input_device = 0; - - if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC1_FILTER) - { - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC1; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC2_FILTER) - { - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC2; - } - - if(hAudioIn.MultiBuffMode == 1) - { - BSP_AUDIO_IN_HalfTransfer_CallBackEx(input_device); - } - else - { - if((DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] == 1) && (DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] == 1)) - { - if(AppBuffTrigger >= hAudioIn.RecSize) - AppBuffTrigger = 0; - - for(index = 0; index < ScratchSize/2; index++) - { - hAudioIn.pRecBuf[AppBuffTrigger] = (int16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)][index] >> 8), -32760, 32760)); - hAudioIn.pRecBuf[AppBuffTrigger + 1] = (int16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)][index] >> 8), -32760, 32760)); - AppBuffTrigger += 2; - } - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 0; - } - - - /* Update Trigger with Remaining Byte before callback if necessary */ - if(AppBuffTrigger >= hAudioIn.RecSize) - { - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); - } - else if((AppBuffTrigger >= hAudioIn.RecSize/2)) - { - if(AppBuffHalf == 0) - { - AppBuffHalf = 1; - /* Manage the remaining file size and new address offset: This function - should be coded by user */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); - } - } - } -} - -/** - * @brief Half reception complete callback. - * @param hi2s : I2S handle. - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief Reception complete callback. - * @param hi2s : I2S handle. - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_I2S_DMAStop(&haudio_i2s)) - { - return AUDIO_ERROR; - } - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, CODEC_PDWN_HW) != 0) - { - return AUDIO_ERROR; - } - /* Wait at least 100us */ - HAL_Delay(1); - } - else /* InputDevice = Digital Mic */ - { - /* Call the Media layer stop function for MIC1 channel */ - if(AUDIO_OK != BSP_AUDIO_IN_PauseEx(INPUT_DEVICE_DIGITAL_MIC1)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer stop function for MIC2 channel */ - if(AUDIO_OK != BSP_AUDIO_IN_PauseEx(INPUT_DEVICE_DIGITAL_MIC2)) - { - return AUDIO_ERROR; - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Stops audio recording. - * @param InputDevice: Microphone to be stopped. Can be INPUT_DEVICE_DIGITAL_MIC1 or INPUT_DEVICE_DIGITAL_MIC2. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_StopEx(uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC2)) - { - return AUDIO_ERROR; - } - else - { - BSP_AUDIO_IN_PauseEx(InputDevice); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)])) - { - return AUDIO_ERROR; - } - - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)])) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Pauses the audio file stream. - * @param InputDevice: Microphone to be paused. Can be INPUT_DEVICE_DIGITAL_MIC1 or INPUT_DEVICE_DIGITAL_MIC2. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PauseEx(uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC2)) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(InputDevice)])) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer start function for MIC2 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], ScratchSize)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer start function for MIC1 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], ScratchSize)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param InputDevice: Microphone to be paused. Can be INPUT_DEVICE_DIGITAL_MIC1 or INPUT_DEVICE_DIGITAL_MIC2. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_ResumeEx(uint32_t *pBuf, uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC2)) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(InputDevice)], (int32_t*)pBuf[MicBuff[POS_VAL(InputDevice)]], hAudioIn.RecSize)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief User callback when record buffer is filled. - * @param InputDevice: INPUT_DEVICE_DIGITAL_MIC1 or INPUT_DEVICE_DIGITAL_MIC2 - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBackEx(uint32_t InputDevice) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief User callback when record buffer is filled. - * @param InputDevice: INPUT_DEVICE_DIGITAL_MIC1 or INPUT_DEVICE_DIGITAL_MIC2 - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBackEx(uint32_t InputDevice) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/** - * @} - */ - -/******************************************************************************* - Static Functions -*******************************************************************************/ -/** - * @brief De-initializes the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -static uint8_t DFSDMx_DeInit(void) -{ - for(uint32_t i = 0; i < DFSDM_MIC_NUMBER; i++) - { - if(hAudioInDfsdmFilter[i].Instance != NULL) - { - if(HAL_OK != HAL_DFSDM_FilterDeInit(&hAudioInDfsdmFilter[i])) - { - return AUDIO_ERROR; - } - hAudioInDfsdmFilter[i].Instance = NULL; - } - if(hAudioInDfsdmChannel[i].Instance != NULL) - { - if(HAL_OK != HAL_DFSDM_ChannelDeInit(&hAudioInDfsdmChannel[i])) - { - return AUDIO_ERROR; - } - hAudioInDfsdmChannel[i].Instance = NULL; - } - } - return AUDIO_OK; -} - -/** - * @brief Initializes the DFSDM channel MSP. - */ -static void DFSDMx_ChannelMspInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable DFSDM clock */ - AUDIO_DFSDMx_CLK_ENABLE(); - - /* Enable GPIO clock */ - AUDIO_DFSDMx_CKOUT_DMIC_GPIO_CLK_ENABLE(); - /* DFSDM pins configuration: DFSDM_CKOUT, DMIC_DATIN pins ------------------*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_CKOUT_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_CKOUT_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_CKOUT_DMIC_GPIO_PORT, &GPIO_InitStruct); - - /* MP34DT01TR microphones uses DFSDM_DATIN0 input pin */ - AUDIO_DFSDMx_DMIC_GPIO_CLK_ENABLE(); - GPIO_InitStruct.Pin = AUDIO_DFSDMx_DMIC_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_DMIC_GPIO_PORT, &GPIO_InitStruct); -} - -/** - * @brief DeInitializes the DFSDM channel MSP. - */ -static void DFSDMx_ChannelMspDeInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* DFSDM pins configuration: DFSDM_CKOUT, DMIC_DATIN pins ------------------*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_CKOUT_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_CKOUT_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - - /* MP34DT01TR microphones uses DFSDM_DATIN0 input pin */ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_DMIC_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); -} - -/** - * @brief Initializes the DFSDM filter MSP. - */ -static void DFSDMx_FilterMspInit(void) -{ - uint32_t i = 0, mic_num = 0, mic_init[DFSDM_MIC_NUMBER] = {0}; - IRQn_Type AUDIO_DFSDM_DMAx_MIC_IRQHandler[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_IRQ, AUDIO_DFSDMx_DMAx_MIC2_IRQ}; - DMA_Stream_TypeDef* AUDIO_DFSDMx_DMAx_MIC_STREAM[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_STREAM, AUDIO_DFSDMx_DMAx_MIC2_STREAM}; - uint32_t AUDIO_DFSDMx_DMAx_MIC_CHANNEL[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_CHANNEL, AUDIO_DFSDMx_DMAx_MIC2_CHANNEL}; - - /* Enable the DMA clock */ - AUDIO_DFSDMx_DMAx_CLK_ENABLE(); - - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC1); - mic_init[mic_num] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC2); - mic_init[mic_num] = 1; - } - - /* Configure the hDmaDfsdm[i] handle parameters */ - hDmaDfsdm[mic_num].Init.Channel = AUDIO_DFSDMx_DMAx_MIC_CHANNEL[mic_num]; - hDmaDfsdm[mic_num].Instance = AUDIO_DFSDMx_DMAx_MIC_STREAM[mic_num]; - hDmaDfsdm[mic_num].Init.Direction = DMA_PERIPH_TO_MEMORY; - hDmaDfsdm[mic_num].Init.PeriphInc = DMA_PINC_DISABLE; - hDmaDfsdm[mic_num].Init.MemInc = DMA_MINC_ENABLE; - hDmaDfsdm[mic_num].Init.PeriphDataAlignment = AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE; - hDmaDfsdm[mic_num].Init.MemDataAlignment = AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE; - hDmaDfsdm[mic_num].Init.Mode = DMA_CIRCULAR; - hDmaDfsdm[mic_num].Init.Priority = DMA_PRIORITY_HIGH; - hDmaDfsdm[mic_num].Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hDmaDfsdm[mic_num].Init.MemBurst = DMA_MBURST_SINGLE; - hDmaDfsdm[mic_num].Init.PeriphBurst = DMA_PBURST_SINGLE; - hDmaDfsdm[mic_num].State = HAL_DMA_STATE_RESET; - - /* Associate the DMA handle */ - __HAL_LINKDMA(&hAudioInDfsdmFilter[mic_num], hdmaReg, hDmaDfsdm[mic_num]); - - /* Reset DMA handle state */ - __HAL_DMA_RESET_HANDLE_STATE(&hDmaDfsdm[mic_num]); - - /* Configure the DMA Channel */ - HAL_DMA_Init(&hDmaDfsdm[mic_num]); - - /* DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_DFSDM_DMAx_MIC_IRQHandler[mic_num], AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_DFSDM_DMAx_MIC_IRQHandler[mic_num]); - } -} - -/** - * @brief DeInitializes the DFSDM filter MSP. - */ -static void DFSDMx_FilterMspDeInit(void) -{ - /* Configure the DMA Channel */ - for(uint32_t i = 0; i < DFSDM_MIC_NUMBER; i++) - { - if(hDmaDfsdm[i].Instance != NULL) - { - HAL_DMA_DeInit(&hDmaDfsdm[i]); - } - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_In_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s and haudio_in_i2sext Instance parameters */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - haudio_in_i2sext.Instance = I2S3ext; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - __HAL_I2S_DISABLE(&haudio_in_i2sext); - - /* I2S peripheral configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - haudio_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX; - haudio_i2s.Init.Standard = I2S_STANDARD_PHILIPS; - haudio_i2s.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; - /* Init the I2S */ - HAL_I2S_Init(&haudio_i2s); - - /* I2Sext peripheral configuration */ - haudio_in_i2sext.Init.AudioFreq = AudioFreq; - haudio_in_i2sext.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2sext.Init.CPOL = I2S_CPOL_HIGH; - haudio_in_i2sext.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2sext.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_in_i2sext.Init.Mode = I2S_MODE_SLAVE_RX; - haudio_in_i2sext.Init.Standard = I2S_STANDARD_PHILIPS; - - /* Init the I2Sext */ - HAL_I2S_Init(&haudio_in_i2sext); - - /* Enable I2S block */ - __HAL_I2S_ENABLE(&haudio_i2s); - __HAL_I2S_ENABLE(&haudio_in_i2sext); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_In_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_i2s); - - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2sext.Instance = I2S3ext; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2sext); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2sext); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.h deleted file mode 100644 index bc76732728..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_audio.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32412g_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_AUDIO_H -#define __STM32412G_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/wm8994/wm8994.h" -#include "stm32412g_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_AUDIO - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Exported_Types STM32412G DISCOVERY Audio Exported Types - * @{ - */ -typedef struct -{ - uint32_t Frequency; /* Record Frequency */ - uint32_t BitResolution; /* Record bit resolution */ - uint32_t ChannelNbr; /* Record Channel Number */ - uint16_t *pRecBuf; /* Pointer to record user buffer */ - uint32_t RecSize; /* Size to record in mono, double size to record in stereo */ - uint32_t InputDevice; /* Audio Input Device */ - uint32_t MultiBuffMode; /* Multi buffer mode selection */ -}AUDIOIN_ContextTypeDef; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Exported_Constants STM32412G DISCOVERY Audio Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - AUDIO OUT CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_OUT_I2Sx SPI3 -#define AUDIO_OUT_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() - -#define AUDIO_OUT_I2Sx_MCK_PIN GPIO_PIN_7 -#define AUDIO_OUT_I2Sx_MCK_GPIO_PORT GPIOC -#define AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_MCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_MCK_AF GPIO_AF6_SPI3 - -#define AUDIO_OUT_I2Sx_SCK_PIN GPIO_PIN_12 -#define AUDIO_OUT_I2Sx_SCK_GPIO_PORT GPIOB -#define AUDIO_OUT_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_SCK_AF GPIO_AF7_SPI3 - -#define AUDIO_OUT_I2Sx_WS_PIN GPIO_PIN_4 -#define AUDIO_OUT_I2Sx_WS_GPIO_PORT GPIOA -#define AUDIO_OUT_I2Sx_WS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_WS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_WS_AF GPIO_AF6_SPI3 - -#define AUDIO_OUT_I2Sx_SD_PIN GPIO_PIN_5 -#define AUDIO_OUT_I2Sx_SD_GPIO_PORT GPIOB -#define AUDIO_OUT_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_SD_AF GPIO_AF6_SPI3 - -/* I2S DMA Stream Tx definitions */ -#define AUDIO_OUT_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_DMAx_STREAM DMA1_Stream5 -#define AUDIO_OUT_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_OUT_I2Sx_DMAx_IRQ DMA1_Stream5_IRQn -#define AUDIO_OUT_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_OUT_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SIZE 0xFFFF - -#define AUDIO_OUT_I2Sx_DMAx_IRQHandler DMA1_Stream5_IRQHandler - - /* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO ((uint32_t)0x0E) /* Select the preemption priority level(0 is the highest) */ - - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* DFSDM Configuration defines */ -#define AUDIO_DFSDMx_MIC1_CHANNEL DFSDM1_Channel0 /* MP34DT01TR microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC2_CHANNEL DFSDM1_Channel3 /* MP34DT01TR microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC1_CHANNEL_FOR_FILTER DFSDM_CHANNEL_0 -#define AUDIO_DFSDMx_MIC2_CHANNEL_FOR_FILTER DFSDM_CHANNEL_3 -#define AUDIO_DFSDMx_MIC1_FILTER DFSDM1_Filter0 /* Common filter for MP34DT01TR microphone input */ -#define AUDIO_DFSDMx_MIC2_FILTER DFSDM1_Filter1 /* Common filter for MP34DT01TR microphone input */ -#define AUDIO_DFSDMx_CLK_ENABLE() __HAL_RCC_DFSDM1_CLK_ENABLE() -#define AUDIO_DFSDMx_CKOUT_PIN GPIO_PIN_2 -#define AUDIO_DFSDMx_CKOUT_DMIC_GPIO_PORT GPIOC -#define AUDIO_DFSDMx_CKOUT_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_DFSDMx_CKOUT_DMIC_AF GPIO_AF8_DFSDM1 -#define AUDIO_DFSDMx_DMIC_PIN GPIO_PIN_1 -#define AUDIO_DFSDMx_DMIC_GPIO_PORT GPIOB -#define AUDIO_DFSDMx_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_DFSDMx_DMIC_AF GPIO_AF8_DFSDM1 - -/* DFSDM DMA MIC1 and MIC2 channels definitions */ -#define AUDIO_DFSDMx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_DFSDMx_DMAx_MIC1_STREAM DMA2_Stream6 -#define AUDIO_DFSDMx_DMAx_MIC1_CHANNEL DMA_CHANNEL_3 -#define AUDIO_DFSDMx_DMAx_MIC2_STREAM DMA2_Stream4 -#define AUDIO_DFSDMx_DMAx_MIC2_CHANNEL DMA_CHANNEL_3 -#define AUDIO_DFSDMx_DMAx_MIC1_IRQ DMA2_Stream6_IRQn -#define AUDIO_DFSDMx_DMAx_MIC2_IRQ DMA2_Stream4_IRQn -#define AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_WORD -#define AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_WORD - -#define AUDIO_DFSDM_DMAx_MIC1_IRQHandler DMA2_Stream6_IRQHandler -#define AUDIO_DFSDM_DMAx_MIC2_IRQHandler DMA2_Stream4_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -/* HW defines for Analog mic configuration */ -#define AUDIO_IN_I2Sx SPI3 -#define AUDIO_IN_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_IN_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() - -#define AUDIO_IN_I2Sx_EXT_SD_PIN GPIO_PIN_4 -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT GPIOB -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_IN_I2Sx_EXT_SD_AF GPIO_AF7_SPI3 - -#define AUDIO_IN_CODEC_INT_PIN GPIO_PIN_2 -#define AUDIO_IN_CODEC_INT_GPIO_PORT GPIOG -#define AUDIO_IN_CODEC_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define AUDIO_IN_CODEC_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define AUDIO_IN_CODEC_INT_IRQ EXTI2_IRQn - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_IN_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_IN_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_IN_I2Sx_DMAx_STREAM DMA1_Stream0 -#define AUDIO_IN_I2Sx_DMAx_CHANNEL DMA_CHANNEL_3 -#define AUDIO_IN_I2Sx_DMAx_IRQ DMA1_Stream0_IRQn -#define AUDIO_IN_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_IN_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_IN_I2Sx_DMAx_IRQHandler DMA1_Stream0_IRQHandler -#define AUDIO_IN_I2Sx_DMAx_IRQ DMA1_Stream0_IRQn - -/* Two channels are used: - - one channel as input which is connected to I2S SCK in stereo mode - - one channel as output which divides the frequency on the input -*/ - -#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM4_CLK_ENABLE() -#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM4_CLK_DISABLE() -#define AUDIO_TIMx TIM4 -#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 -#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ -#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_TIMx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_TIMx_GPIO_PORT GPIOB -#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_6 -#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_7 -#define AUDIO_TIMx_AF GPIO_AF2_TIM4 - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK ((uint8_t)0) -#define AUDIO_ERROR ((uint8_t)1) -#define AUDIO_TIMEOUT ((uint8_t)2) - -/* Audio out parameters */ -#define DEFAULT_AUDIO_OUT_FREQ I2S_AUDIOFREQ_48K -#define DEFAULT_AUDIO_OUT_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_OUT_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_OUT_VOLUME ((uint16_t)64) - -/* Audio in parameters */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) - -/*------------------------------------------------------------------------------ - OUTPUT DEVICES definition -------------------------------------------------------------------------------*/ - -/* Alias on existing output devices to adapt for 2 headphones output */ -#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE -#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 */ - -/*------------------------------------------------------------------------------ - INPUT DEVICES definition -------------------------------------------------------------------------------*/ -/* Analog microphone input from 3.5 audio jack connector */ -#define INPUT_DEVICE_ANALOG_MIC ((uint32_t)0x00000001) -/* MP34DT01TR digital microphone on PCB top side */ -#define INPUT_DEVICE_DIGITAL_MIC1 ((uint32_t)0x00000010) -#define INPUT_DEVICE_DIGITAL_MIC2 ((uint32_t)0x00000020) -#define INPUT_DEVICE_DIGITAL_MIC ((uint32_t)(INPUT_DEVICE_DIGITAL_MIC1 | INPUT_DEVICE_DIGITAL_MIC2)) -#define DFSDM_MIC_NUMBER (2) -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Exported_Variables STM32412G DISCOVERY Audio Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_Exported_Macros STM32412G DISCOVERY Audio Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SIZE)? (x):DMA_MAX_SIZE) -#define POS_VAL(VAL) (POSITION_VAL(VAL) - 4) -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_OUT_Exported_Functions STM32412G DISCOVERY AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); -void BSP_AUDIO_OUT_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_AUDIO_IN_Exported_Functions STM32412G DISCOVERY AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_InitEx(uint32_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_ConfigMicDefault(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_ConfigDigitalMic(uint32_t InputDevice, void *Params); -uint8_t BSP_AUDIO_IN_AllocScratch (int32_t *pScratch, uint32_t size); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pBuf, uint32_t Size); -uint8_t BSP_AUDIO_IN_RecordEx(uint32_t *pBuf, uint32_t Size); -uint8_t BSP_AUDIO_IN_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_StopEx(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_PauseEx(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_ResumeEx(uint32_t *pBuf, uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -void BSP_AUDIO_IN_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); -void BSP_AUDIO_IN_TransferComplete_CallBackEx(uint32_t InputDevice); -void BSP_AUDIO_IN_HalfTransfer_CallBackEx(uint32_t InputDevice); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -uint8_t BSP_AUDIO_IN_ClockConfig(uint32_t AudioFreq, void *Params); -void BSP_AUDIO_IN_MspInit(void *Params); -void BSP_AUDIO_IN_MspDeInit(void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.c deleted file mode 100644 index a8c4f1e746..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.c +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24LR64 - * EEPROM memory. - * To be able to use this driver, the switch EE_M24LR64 must be defined - * in your toolchain compiler preprocessor - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24LR64) is available on separate daughter - * board ANT7-M24LR-A, which is not provided with the STM32412G_DISCOVERY - * board. - * To use this driver you have to connect the ANT7-M24LR-A to CN3 - * connector of STM32412G_DISCOVERY board. - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm32412g_discovery.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm32412g_discovery.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and BSP_EEPROM_WritePage()) use DMA mode to perform the data - * transfer to/from EEPROM memory. - * - * @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform - * small write (less than 1 page) BUT The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24LR64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0(GND) | 1 (0V) | - * | . | AC0 | 2 | - * | . | AC1 | 3 | - * | . | VSS | 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | . | E1(GND) | 7 (0V) | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_EEPROM STM32412G-DISCOVERY EEPROM - * @brief This file includes the I2C EEPROM driver of STM32412G-DISCOVERY board. - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_EEPROM_Private_Variables STM32412G Discovery Eeprom Private Variables - * @{ - */ -__IO uint16_t EEPROMAddress = 0; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_EEPROM_Private_Functions STM32412G Discovery Eeprom Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * @note There are 2 different versions of M24LR64 (A01 & A02). - * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) - * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address for A01 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A01; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* Select the EEPROM address for A02 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A02; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - } - return EEPROM_OK; -} - -/** - * @brief DeInitializes the EEPROM. - * @retval EEPROM state - */ -uint8_t BSP_EEPROM_DeInit(void) -{ - /* I2C won't be disabled because common to other functionalities */ - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage== 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.h deleted file mode 100644 index 0ca814ef3f..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_eeprom.h +++ /dev/null @@ -1,104 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32412g_discovery_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F412G_DISCOVERY_EEPROM_H -#define __STM32F412G_DISCOVERY_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_EEPROM - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_EEPROM_Exported_Constants STM32412G DISCOVERY EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE ((uint8_t)4) -#define EEPROM_MAX_SIZE ((uint16_t)0x2000) /* 64Kbit */ - - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS ((uint32_t)3000) - -#define EEPROM_OK ((uint32_t)0) -#define EEPROM_FAIL ((uint32_t)1) -#define EEPROM_TIMEOUT ((uint32_t)2) -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_EEPROM_Exported_Functions STM32412G DISCOVERY EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint8_t BSP_EEPROM_DeInit(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occurs during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_EEPROM_H */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.c deleted file mode 100644 index 2f71285683..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.c +++ /dev/null @@ -1,1115 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM32412G-DISCOVERY board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive indirectly an LCD TFT. - - This driver supports the ST7789H2 and LS016B8UY LCD. - - The ST7789H2 and LS016B8UY component drivers MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - - + Display on LCD - o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LCD STM32412G-DISCOVERY LCD - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Private_Macros STM32412G Discovery Lcd Private Macros - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + Z)->X)) -#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Private_Variables STM32412G Discovery Lcd Private Variables - * @{ - */ -LCD_DrawPropTypeDef DrawProp; -static LCD_DrvTypeDef *LcdDrv; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Private_FunctionPrototypes STM32412G Discovery Lcd Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Private_Functions STM32412G Discovery Lcd Private Functions - * @{ - */ -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - return (BSP_LCD_InitEx(LCD_ORIENTATION_LANDSCAPE)); -} -/** - * @brief Initializes the LCD with a given orientation. - * @param orientation: LCD_ORIENTATION_PORTRAIT or LCD_ORIENTATION_LANDSCAPE - * @retval LCD state - */ -uint8_t BSP_LCD_InitEx(uint32_t orientation) -{ - uint8_t ret = LCD_ERROR; - - /* Default value for draw propriety */ - DrawProp.BackColor = 0xFFFF; - DrawProp.pFont = &Font24; - DrawProp.TextColor = 0x0000; - - /* Initialize LCD special pins GPIOs */ - BSP_LCD_MspInit(); - - /* Backlight control signal assertion */ - HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET); - - /* Apply hardware reset according to procedure indicated in FRD154BP2901 documentation */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET); - HAL_Delay(5); /* Reset signal asserted during 5ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET); - HAL_Delay(10); /* Reset signal released during 10ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET); - HAL_Delay(20); /* Reset signal asserted during 20ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET); - HAL_Delay(10); /* Reset signal released during 10ms */ - - if(ST7789H2_drv.ReadID() == ST7789H2_ID) - { - LcdDrv = &ST7789H2_drv; - - /* LCD Init */ - LcdDrv->Init(); - - if(orientation == LCD_ORIENTATION_PORTRAIT) - { - ST7789H2_SetOrientation(ST7789H2_ORIENTATION_PORTRAIT); - } - else if(orientation == LCD_ORIENTATION_LANDSCAPE_ROT180) - { - ST7789H2_SetOrientation(ST7789H2_ORIENTATION_LANDSCAPE_ROT180); - } - else - { - /* Default landscape orientation is selected */ - } - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - ret = LCD_OK; - } - else if(ls016b8uy_drv.ReadID() == LS016B8UY_ID) - { - LcdDrv = &ls016b8uy_drv; - - /* LCD Init */ - LcdDrv->Init(); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - ret = LCD_OK; - } - - return ret; -} - -/** - * @brief DeInitializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_DeInit(void) -{ - /* Actually LcdDrv does not provide a DeInit function */ - return LCD_OK; -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return(LcdDrv->GetLcdPixelWidth()); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return(LcdDrv->GetLcdPixelHeight()); -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint16_t BSP_LCD_GetTextColor(void) -{ - return DrawProp.TextColor; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint16_t BSP_LCD_GetBackColor(void) -{ - return DrawProp.BackColor; -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code RGB(5-6-5) - */ -void BSP_LCD_SetTextColor(uint16_t Color) -{ - DrawProp.TextColor = Color; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Background color code RGB(5-6-5) - */ -void BSP_LCD_SetBackColor(uint16_t Color) -{ - DrawProp.BackColor = Color; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp.pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp.pFont; -} - -/** - * @brief Clears the hole LCD. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint16_t Color) -{ - uint32_t counter = 0; - uint32_t y_size = 0; - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = Color; - y_size = BSP_LCD_GetYSize(); - - for(counter = 0; counter < y_size; counter++) - { - BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize()); - } - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Clears the selected line. - * @param Line: Line to be cleared - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - */ -void BSP_LCD_ClearStringLine(uint16_t Line) -{ - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = DrawProp.BackColor;; - - /* Draw a rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height); - - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp.pFont->table[(Ascii-' ') *\ - DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters on the LCD. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp.pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp.pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Check that the Start column is located in the screen */ - if ((refcolumn < 1) || (refcolumn >= 0x8000)) - { - refcolumn = 1; - } - - /* Send the string character by character on lCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp.pFont->Width; - /* Point on the next character */ - Text++; - i++; - } -} - -/** - * @brief Displays a character on the LCD. - * @param Line: Line where to display the character shape - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint16_t ret = 0; - - if(LcdDrv->ReadPixel != NULL) - { - ret = LcdDrv->ReadPixel(Xpos, Ypos); - } - - return ret; -} - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in RGB mode (5-6-5) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code) -{ - if(LcdDrv->WritePixel != NULL) - { - LcdDrv->WritePixel(Xpos, Ypos, RGB_Code); - } -} - -/** - * @brief Draws an horizontal line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawHLine != NULL) - { - LcdDrv->DrawHLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel((Xpos + index), Ypos, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws a vertical line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawVLine != NULL) - { - LcdDrv->DrawVLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel(Xpos, Ypos + index, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws an uni-line (between two points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - current_x = 0; - current_y = Radius; - - while (current_x <= current_y) - { - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp.TextColor); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } -} - -/** - * @brief Draws an poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t x = 0, y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - x = Points->X; - y = Points->Y; - Points++; - BSP_LCD_DrawLine(x, y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture (16 bpp). - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address. - */ -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t height = 0; - uint32_t width = 0; - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - SetDisplayWindow(Xpos, Ypos, width, height); - - if(LcdDrv->DrawBitmap != NULL) - { - LcdDrv->DrawBitmap(Xpos, Ypos, pbmp); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws RGB Image (16 bpp). - * @param Xpos: X position in the LCD - * @param Ypos: Y position in the LCD - * @param Xsize: X size in the LCD - * @param Ysize: Y size in the LCD - * @param pdata: Pointer to the RGB Image address. - * @retval None - */ -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - SetDisplayWindow(Xpos, Ypos, Xsize, Ysize); - - if(LcdDrv->DrawRGBImage != NULL) - { - LcdDrv->DrawRGBImage(Xpos, Ypos, Xsize, Ysize, pdata); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws a full rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - BSP_LCD_SetTextColor(DrawProp.TextColor); - do - { - BSP_LCD_DrawHLine(Xpos, Ypos++, Width); - } - while(Height--); -} - -/** - * @brief Draws a full circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - - current_x = 0; - current_y = Radius; - - BSP_LCD_SetTextColor(DrawProp.TextColor); - - while (current_x <= current_y) - { - if(current_y > 0) - { - BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y); - BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y); - } - - if(current_x > 0) - { - BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x); - BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x); - } - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } - - BSP_LCD_SetTextColor(DrawProp.TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Enables the display. - */ -void BSP_LCD_DisplayOn(void) -{ - LcdDrv->DisplayOn(); -} - -/** - * @brief Disables the display. - */ -void BSP_LCD_DisplayOff(void) -{ - LcdDrv->DisplayOff(); -} - - -/** - * @brief Initializes the LCD GPIO special pins MSP. - */ -__weak void BSP_LCD_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIOs clock */ - LCD_RESET_GPIO_CLK_ENABLE(); - LCD_TE_GPIO_CLK_ENABLE(); - LCD_BL_CTRL_GPIO_CLK_ENABLE(); - - /* LCD_RESET GPIO configuration */ - gpio_init_structure.Pin = LCD_RESET_PIN; /* LCD_RESET pin has to be manually controlled */ - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - HAL_GPIO_Init(LCD_RESET_GPIO_PORT, &gpio_init_structure); - - /* LCD_TE GPIO configuration */ - gpio_init_structure.Pin = LCD_TE_PIN; /* LCD_TE pin has to be manually managed */ - gpio_init_structure.Mode = GPIO_MODE_INPUT; - HAL_GPIO_Init(LCD_TE_GPIO_PORT, &gpio_init_structure); - - /* LCD_BL_CTRL GPIO configuration */ - gpio_init_structure.Pin = LCD_BL_CTRL_PIN; /* LCD_BL_CTRL pin has to be manually controlled */ - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - HAL_GPIO_Init(LCD_BL_CTRL_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief DeInitializes LCD GPIO special pins MSP. - */ -__weak void BSP_LCD_MspDeInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* LCD_RESET GPIO deactivation */ - gpio_init_structure.Pin = LCD_RESET_PIN; - HAL_GPIO_DeInit(LCD_RESET_GPIO_PORT, gpio_init_structure.Pin); - - /* LCD_TE GPIO deactivation */ - gpio_init_structure.Pin = LCD_TE_PIN; - HAL_GPIO_DeInit(LCD_TE_GPIO_PORT, gpio_init_structure.Pin); - - /* LCD_BL_CTRL GPIO deactivation */ - gpio_init_structure.Pin = LCD_BL_CTRL_PIN; - HAL_GPIO_DeInit(LCD_BL_CTRL_GPIO_PORT, gpio_init_structure.Pin); - - /* GPIO pins clock can be shut down in the application - by surcharging this __weak function */ -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp.pFont->Height; - width = DrawProp.pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Sets display window. - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - if(LcdDrv->SetDisplayWindow != NULL) - { - LcdDrv->SetDisplayWindow(Xpos, Ypos, Width, Height); - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.h deleted file mode 100644 index cf85a19033..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_lcd.h +++ /dev/null @@ -1,217 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32412g_discovery_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_LCD_H -#define __STM32412G_DISCOVERY_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" -#include "../Components/ls016b8uy/ls016b8uy.h" -#include "../Components/st7789h2/st7789h2.h" -#include "../../../Utilities/Fonts/fonts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_LCD - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Exported_Types STM32412G DISCOVERY LCD Exported Types - * @{ - */ -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -}LCD_DrawPropTypeDef; - -typedef struct -{ - int16_t X; - int16_t Y; -}Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* Center mode */ - RIGHT_MODE = 0x02, /* Right mode */ - LEFT_MODE = 0x03 /* Left mode */ -}Line_ModeTypdef; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Exported_Constants STM32412G DISCOVERY LCD Exported Constants - * @{ - */ -/** - * @brief LCD status structure definition - */ -#define LCD_OK ((uint8_t)0x00) -#define LCD_ERROR ((uint8_t)0x01) -#define LCD_TIMEOUT ((uint8_t)0x02) - -/** - * @brief LCD orientation - */ -#define LCD_ORIENTATION_PORTRAIT ((uint8_t)0x00) /*!< Portrait orientation choice of LCD screen */ -#define LCD_ORIENTATION_LANDSCAPE ((uint8_t)0x01) /*!< Landscape orientation choice of LCD screen */ -#define LCD_ORIENTATION_LANDSCAPE_ROT180 ((uint8_t)0x02) /*!< Landscape rotated 180° orientation choice of LCD screen */ - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE ((uint16_t)0x001F) -#define LCD_COLOR_GREEN ((uint16_t)0x07E0) -#define LCD_COLOR_RED ((uint16_t)0xF800) -#define LCD_COLOR_CYAN ((uint16_t)0x07FF) -#define LCD_COLOR_MAGENTA ((uint16_t)0xF81F) -#define LCD_COLOR_YELLOW ((uint16_t)0xFFE0) -#define LCD_COLOR_LIGHTBLUE ((uint16_t)0x841F) -#define LCD_COLOR_LIGHTGREEN ((uint16_t)0x87F0) -#define LCD_COLOR_LIGHTRED ((uint16_t)0xFC10) -#define LCD_COLOR_LIGHTMAGENTA ((uint16_t)0xFC1F) -#define LCD_COLOR_LIGHTYELLOW ((uint16_t)0xFFF0) -#define LCD_COLOR_DARKBLUE ((uint16_t)0x0010) -#define LCD_COLOR_DARKGREEN ((uint16_t)0x0400) -#define LCD_COLOR_DARKRED ((uint16_t)0x8000) -#define LCD_COLOR_DARKCYAN ((uint16_t)0x0410) -#define LCD_COLOR_DARKMAGENTA ((uint16_t)0x8010) -#define LCD_COLOR_DARKYELLOW ((uint16_t)0x8400) -#define LCD_COLOR_WHITE ((uint16_t)0xFFFF) -#define LCD_COLOR_LIGHTGRAY ((uint16_t)0xD69A) -#define LCD_COLOR_GRAY ((uint16_t)0x8410) -#define LCD_COLOR_DARKGRAY ((uint16_t)0x4208) -#define LCD_COLOR_BLACK ((uint16_t)0x0000) -#define LCD_COLOR_BROWN ((uint16_t)0xA145) -#define LCD_COLOR_ORANGE ((uint16_t)0xFD20) - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font12 - -/** - * @brief LCD special pins - */ -/* LCD reset pin */ -#define LCD_RESET_PIN GPIO_PIN_11 -#define LCD_RESET_GPIO_PORT GPIOD -#define LCD_RESET_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LCD_RESET_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -/* LCD tearing effect pin */ -#define LCD_TE_PIN GPIO_PIN_4 -#define LCD_TE_GPIO_PORT GPIOG -#define LCD_TE_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LCD_TE_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -/* Backlight control pin */ -#define LCD_BL_CTRL_PIN GPIO_PIN_5 -#define LCD_BL_CTRL_GPIO_PORT GPIOF -#define LCD_BL_CTRL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define LCD_BL_CTRL_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_LCD_Exported_Functions STM32412G DISCOVERY LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_InitEx(uint32_t orientation); -uint8_t BSP_LCD_DeInit(void); -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -uint16_t BSP_LCD_GetTextColor(void); -uint16_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetTextColor(__IO uint16_t Color); -void BSP_LCD_SetBackColor(__IO uint16_t Color); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -void BSP_LCD_Clear(uint16_t Color); -void BSP_LCD_ClearStringLine(uint16_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code); -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pbmp); -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/* These functions can be modified in case the current settings - need to be changed for specific application needs */ -__weak void BSP_LCD_MspInit(void); -__weak void BSP_LCD_MspDeInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_LCD_H */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.c deleted file mode 100644 index c10b4984f0..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.c +++ /dev/null @@ -1,754 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_qspi.c - * @author MCD Application Team - * @brief This file includes a standard driver for the N25Q128A QSPI - * memory mounted on STM32412G-DISCOVERY board. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - (#) This driver is used to drive the N25Q128A QSPI external - memory mounted on STM32412G-DISCOVERY board. - - (#) This driver need a specific component driver (N25Q128A) to be included with. - - (#) Initialization steps: - (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This - function includes the MSP layer hardware resources initialization and the - QSPI interface with the external memory. - - (#) QSPI memory operations - (++) QSPI memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_QSPI_Read()/BSP_QSPI_Write(). - (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. - (see the QSPI memory data sheet) - (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_QSPI_Erase_Chip(). - (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. - (see the QSPI memory data sheet) - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery_qspi.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_QSPI STM32412G-DISCOVERY QSPI - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_QSPI_Private_Variables STM32412G Discovery QSPI Private Variables - * @{ - */ -QSPI_HandleTypeDef QSPIHandle; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_QSPI_Private_FunctionPrototypes STM32412G Discovery QSPI Private FunctionPrototypes - * @{ - */ -static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout); - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_QSPI_Private_Functions STM32412G Discovery QSPI Private Functions - * @{ - */ - -/** - * @brief Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Init(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level initialization */ - BSP_QSPI_MspInit(&QSPIHandle, NULL); - - /* QSPI initialization */ - QSPIHandle.Init.ClockPrescaler = 0; /* QSPI freq = 100 MHz/(0+1) = 100 Mhz */ - QSPIHandle.Init.FifoThreshold = 4; - QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; - QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; - QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; /* Min 50ns for nonRead command */ - QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; - QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; - QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; - - if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* QSPI memory reset */ - if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Configuration of the dummy cycles on QSPI memory side */ - if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - return QSPI_OK; -} - -/** - * @brief De-Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_DeInit(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level De-initialization */ - BSP_QSPI_MspDeInit(&QSPIHandle, NULL); - - return QSPI_OK; -} - -/** - * @brief Reads an amount of data from the QSPI memory. - * @param pData: Pointer to data to be read - * @param ReadAddr: Read start address - * @param Size: Size of data to read - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the read command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = ReadAddr; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.NbData = Size; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Set S# timing for Read command: Min 20ns for N25Q128A memory */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Restore S# timing for nonRead commands */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); - - return QSPI_OK; -} - -/** - * @brief Writes an amount of data to the QSPI memory. - * @param pData: Pointer to data to be written - * @param WriteAddr: Write start address - * @param Size: Size of data to write - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - uint32_t end_addr, current_size, current_addr; - - /* Calculation of the size between the write address and the end of the page */ - current_size = N25Q128A_PAGE_SIZE - (WriteAddr % N25Q128A_PAGE_SIZE); - - /* Check if the size of the data is less than the remaining place in the page */ - if (current_size > Size) - { - current_size = Size; - } - - /* Initialize the address variables */ - current_addr = WriteAddr; - end_addr = WriteAddr + Size; - - /* Initialize the program command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = EXT_QUAD_IN_FAST_PROG_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Perform the write page by page */ - do - { - s_command.Address = current_addr; - s_command.NbData = current_size; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of program */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update the address and size variables for next page programming */ - current_addr += current_size; - pData += current_size; - current_size = ((current_addr + N25Q128A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q128A_PAGE_SIZE; - } while (current_addr < end_addr); - - return QSPI_OK; -} - -/** - * @brief Erases the specified block of the QSPI memory. - * @param BlockAddress: Block address to erase - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = SUBSECTOR_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = BlockAddress; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Erases the entire QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Chip(void) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = BULK_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_BULK_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Reads current status of the QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetStatus(void) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read flag status register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_FLAG_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg & (N25Q128A_FSR_PRERR | N25Q128A_FSR_VPPERR | N25Q128A_FSR_PGERR | N25Q128A_FSR_ERERR)) != 0) - { - return QSPI_ERROR; - } - else if ((reg & (N25Q128A_FSR_PGSUS | N25Q128A_FSR_ERSUS)) != 0) - { - return QSPI_SUSPENDED; - } - else if ((reg & N25Q128A_FSR_READY) != 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } -} - -/** - * @brief Return the configuration of the QSPI memory. - * @param pInfo: pointer on the configuration structure - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetInfo(QSPI_Info* pInfo) -{ - /* Configure the structure with the memory configuration */ - pInfo->FlashSize = N25Q128A_FLASH_SIZE; - pInfo->EraseSectorSize = N25Q128A_SUBSECTOR_SIZE; - pInfo->EraseSectorsNumber = (N25Q128A_FLASH_SIZE/N25Q128A_SUBSECTOR_SIZE); - pInfo->ProgPageSize = N25Q128A_PAGE_SIZE; - pInfo->ProgPagesNumber = (N25Q128A_FLASH_SIZE/N25Q128A_PAGE_SIZE); - - return QSPI_OK; -} - -/** - * @brief Configure the QSPI in memory-mapped mode - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_EnableMemoryMappedMode(void) -{ - QSPI_CommandTypeDef s_command; - QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; - - /* Configure the command for the read instruction */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the memory mapped mode */ - s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; - - if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - - -/** - * @brief QSPI MSP Initialization - * This function configures the hardware resources used in this example: - * - Peripheral's clock enable - * - Peripheral's GPIO Configuration - * - NVIC configuration for QSPI interrupt - * @param hqspi: QSPI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*##-1- Enable peripherals and GPIO Clocks #################################*/ - /* Enable the QuadSPI memory interface clock */ - QSPI_CLK_ENABLE(); - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - /* Enable GPIO clocks */ - QSPI_CS_GPIO_CLK_ENABLE(); - QSPI_CLK_GPIO_CLK_ENABLE(); - QSPI_Dx_GPIO_CLK_ENABLE(); - - /*##-2- Configure peripheral GPIO ##########################################*/ - /* QSPI CS GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CS_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); - - /* QSPI CLK GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CLK_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); - - /* QSPI D0 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D0_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); - - /* QSPI D1 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D1_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure); - - /* QSPI D2 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D2_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure); - - /* QSPI D3 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D3_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure); - - /*##-3- Configure the NVIC for QSPI #########################################*/ - /* NVIC configuration for QSPI interrupt */ - HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(QUADSPI_IRQn); -} - - -/** - * @brief QSPI MSP De-Initialization - * This function frees the hardware resources used in this example: - * - Disable the Peripheral's clock - * - Revert GPIO and NVIC configuration to their default state - * @param hqspi: QSPI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - /*##-1- Disable the NVIC for QSPI ###########################################*/ - HAL_NVIC_DisableIRQ(QUADSPI_IRQn); - - /*##-2- Disable peripherals and GPIO Clocks ################################*/ - /* De-Configure QSPI pins */ - HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN); - HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN); - HAL_GPIO_DeInit(QSPI_D0_GPIO_PORT, QSPI_D0_PIN); - HAL_GPIO_DeInit(QSPI_D1_GPIO_PORT, QSPI_D1_PIN); - HAL_GPIO_DeInit(QSPI_D2_GPIO_PORT, QSPI_D2_PIN); - HAL_GPIO_DeInit(QSPI_D3_GPIO_PORT, QSPI_D3_PIN); - - /*##-3- Reset peripherals ##################################################*/ - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - - /* Disable the QuadSPI memory interface clock */ - QSPI_CLK_DISABLE(); -} - -/*********************** Static functions *************************************/ -/** - * @brief This function reset the QSPI memory. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the reset enable command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = RESET_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Send the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Send the reset memory command */ - s_command.Instruction = RESET_MEMORY_CMD; - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function configure the dummy cycles on memory side. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read volatile configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_VOL_CFG_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(hqspi) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update volatile configuration register (with new dummy cycles) */ - s_command.Instruction = WRITE_VOL_CFG_REG_CMD; - MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function send a Write Enable and wait it is effective. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Enable write operations */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = WRITE_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for write enabling */ - s_config.Match = N25Q128A_SR_WREN; - s_config.Mask = N25Q128A_SR_WREN; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.DataMode = QSPI_DATA_1_LINE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function read the SR of the memory and wait the EOP. - * @param hqspi: QSPI handle - * @param Timeout - */ -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - s_config.Match = 0; - s_config.Mask = N25Q128A_SR_WIP; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.h deleted file mode 100644 index c7cad30936..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_qspi.h +++ /dev/null @@ -1,151 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_qspi.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32412g_discovery_qspi.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_QSPI_H -#define __STM32412G_DISCOVERY_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "../Components/n25q128a/n25q128a.h" - -/** @addtogroup STM32412G_DISCOVERY_QSPI - * @{ - */ - - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup STM32412G_DISCOVERY_QSPI_Exported_Constants STM32412G Discovery QSPI Exported Constants - * @{ - */ -/* QSPI Error codes */ -#define QSPI_OK ((uint8_t)0x00) -#define QSPI_ERROR ((uint8_t)0x01) -#define QSPI_BUSY ((uint8_t)0x02) -#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) -#define QSPI_SUSPENDED ((uint8_t)0x08) - - -/* Definition for QSPI clock resources */ -#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() -#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() -#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define QSPI_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define QSPI_Dx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_Dx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() -#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() - -/* Definition for QSPI Pins */ -#define QSPI_CS_PIN GPIO_PIN_6 -#define QSPI_CS_GPIO_PORT GPIOG -#define QSPI_CLK_PIN GPIO_PIN_2 -#define QSPI_CLK_GPIO_PORT GPIOB -#define QSPI_D0_PIN GPIO_PIN_8 -#define QSPI_D0_GPIO_PORT GPIOF -#define QSPI_D1_PIN GPIO_PIN_9 -#define QSPI_D1_GPIO_PORT GPIOF -#define QSPI_D2_PIN GPIO_PIN_7 -#define QSPI_D2_GPIO_PORT GPIOF -#define QSPI_D3_PIN GPIO_PIN_6 -#define QSPI_D3_GPIO_PORT GPIOF - -/* N25Q128A13EF840F Micron memory */ -/* Size of the flash */ -#define QSPI_FLASH_SIZE 23 /* Address bus width to access whole memory space */ -#define QSPI_PAGE_SIZE 256 - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup STM32412G_DISCOVERY_QSPI_Exported_Types STM32412G Discovery QSPI Exported Types - * @{ - */ -/* QSPI Info */ -typedef struct { - uint32_t FlashSize; /*!< Size of the flash */ - uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ - uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ - uint32_t ProgPageSize; /*!< Size of pages for the program operation */ - uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ -} QSPI_Info; - -/** - * @} - */ - - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup STM32412G_DISCOVERY_QSPI_Exported_Functions STM32412G Discovery QSPI Exported Functions - * @{ - */ -uint8_t BSP_QSPI_Init (void); -uint8_t BSP_QSPI_DeInit (void); -uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); -uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_QSPI_Erase_Chip (void); -uint8_t BSP_QSPI_GetStatus (void); -uint8_t BSP_QSPI_GetInfo (QSPI_Info* pInfo); -uint8_t BSP_QSPI_EnableMemoryMappedMode(void); -/* BSP Aliased function maintained for legacy purpose */ -#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode - -/* These functions can be modified in case the current settings - need to be changed for specific application needs */ -void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); -void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_QSPI_H */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.c deleted file mode 100644 index 3ff82db91b..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.c +++ /dev/null @@ -1,546 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM32412G-DISCOVERY - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM32412G-DISCOVERY - board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the board. - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_SD STM32412G-DISCOVERY SD - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_SD_Private_Variables STM32412G Discovery Sd Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_SD_Private_Functions STM32412G Discovery Sd Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t sd_state = MSD_OK; - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Msp SD Detect pin initialization */ - BSP_SD_Detect_MspInit(&uSdHandle, NULL); - - /* Check if SD card is present */ - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR_SD_NOT_PRESENT; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - /* HAL SD initialization */ - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(sd_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - sd_state = MSD_ERROR; - } - else - { - sd_state = MSD_OK; - } - } - - return sd_state; -} - -/** - * @brief DeInitializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_DeInit(void) -{ - uint8_t sd_state = MSD_OK; - - uSdHandle.Instance = SDIO; - - /* HAL SD deinitialization */ - if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Msp SD deinitialization */ - uSdHandle.Instance = SDIO; - BSP_SD_MspDeInit(&uSdHandle, NULL); - - return sd_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns MSD_OK - */ -uint8_t BSP_SD_ITConfig(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Configure Interrupt mode for SD detection pin */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_RISING_FALLING; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); - - /* Enable and set SD detect EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(SD_DETECT_EXTI_IRQn), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(SD_DETECT_EXTI_IRQn)); - - return MSD_OK; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if (HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == GPIO_PIN_SET) - { - status = SD_NOT_PRESENT; - } - - return status; -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval None - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_rx_handle.Init.Mode = DMA_PFCTRL; - dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_rx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_rx_handle); - - /* Configure DMA Tx parameters */ - dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_tx_handle.Init.Mode = DMA_PFCTRL; - dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_tx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_tx_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief Initializes the SD Detect pin MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval None - */ -__weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - SD_DETECT_GPIO_CLK_ENABLE(); - - /* GPIO configuration in input for uSD_Detect signal */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief DeInitializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval None - */ -__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - - /* Disable NVIC for DMA transfer complete interrupts */ - HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); - HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - HAL_DMA_DeInit(&dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - HAL_DMA_DeInit(&dma_tx_handle); - - /* Disable NVIC for SDIO interrupts */ - HAL_NVIC_DisableIRQ(SDIO_IRQn); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* Disable SDIO clock */ - __HAL_RCC_SDIO_CLK_DISABLE(); - - /* GPIO pins clock and DMA clocks can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.h deleted file mode 100644 index 5458c2132d..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_sd.h +++ /dev/null @@ -1,136 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32412g_discovery_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_SD_H -#define __STM32412G_DISCOVERY_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_SD - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_SD_Exported_Types STM32412G DISCOVERY SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_SD_Exported_Constants STM32412G DISCOVERY SD Exported Constants - * @{ - */ -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) -#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(SD_DETECT_PIN) -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_SD_Exported_Functions STM32412G DISCOVERY SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_SD_H */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.c b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.c deleted file mode 100644 index c831f7941d..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.c +++ /dev/null @@ -1,467 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM32412G-DISCOVERY evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM32412G-DISCOVERY - evaluation board on the FRIDA LCD mounted on MB1209 daughter board. - The touch screen driver IC is a FT6x36 type which share the same register naming - with FT6206 type. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" -#include "stm32412g_discovery_ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_TS STM32412G-DISCOVERY TS - * @{ - */ - -/** @defgroup STM32412G_DISCOVERY_TS_Private_Variables STM32412G Discovery TS Private Variables - * @{ - */ -static TS_DrvTypeDef *tsDriver; -static uint8_t I2C_Address = 0; -static uint8_t tsOrientation = TS_SWAP_NONE; - -/* Table for touchscreen event information display on LCD : table indexed on enum @ref TS_TouchEventTypeDef information */ -char * ts_event_string_tab[TOUCH_EVENT_NB_MAX] = { "None", - "Press down", - "Lift up", - "Contact" - }; - -/* Table for touchscreen gesture Id information display on LCD : table indexed on enum @ref TS_GestureIdTypeDef information */ -char * ts_gesture_id_string_tab[GEST_ID_NB_MAX] = { "None", - "Move Up", - "Move Right", - "Move Down", - "Move Left", - "Zoom In", - "Zoom Out" - }; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_TS_Private_Functions STM32412G Discovery TS Private Functions - * @{ - */ -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..). - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY) -{ - return (BSP_TS_InitEx(ts_SizeX, ts_SizeY, TS_ORIENTATION_LANDSCAPE)); -} - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..) - * with a given orientation - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @param orientation : TS_ORIENTATION_LANDSCAPE or TS_ORIENTATION_PORTRAIT - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_InitEx(uint16_t ts_SizeX, uint16_t ts_SizeY, uint8_t orientation) -{ - uint8_t ts_status = TS_OK; - - /* Note : I2C_Address is un-initialized here, but is not used at all in init function */ - /* but the prototype of Init() is like that in template and should be respected */ - - /* Initialize the communication channel to sensor (I2C) if necessary */ - /* that is initialization is done only once after a power up */ - ft6x06_ts_drv.Init(I2C_Address); - - /* TouchScreen IC controller reset sequence */ - BSP_TS_Reset(); - - /* Scan TouchScreen IC controller ID register by I2C Read */ - /* Verify this is a FT6x36 or FT3x67, otherwise this is an error case */ - if(ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS) == FT6x36_ID_VALUE) - { - /* Found FT6x36 : Initialize the TS driver structure */ - tsDriver = &ft6x06_ts_drv; - - I2C_Address = TS_I2C_ADDRESS; - - /* Get LCD chosen orientation */ - if(orientation == TS_ORIENTATION_PORTRAIT) - { - tsOrientation = TS_SWAP_X | TS_SWAP_Y; - } - else if(orientation == TS_ORIENTATION_LANDSCAPE_ROT180) - { - tsOrientation = TS_SWAP_XY; - } - else - { - tsOrientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - tsDriver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - tsDriver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } - else - { -#if defined (USE_STM32412G_DISCOVERY_REVD) - ft3x67_ts_drv.Init(I2C_Address); - BSP_TS_Reset(); - - if(ft3x67_ts_drv.ReadID(TS_I2C_ADDRESS) == FT3X67_ID_VALUE) - { - /* Found FT3x67 : Initialize the TS driver structure */ - tsDriver = &ft3x67_ts_drv; - - I2C_Address = TS_I2C_ADDRESS; - - /* Get LCD chosen orientation */ - if(orientation == TS_ORIENTATION_PORTRAIT) - { - tsOrientation = TS_SWAP_X | TS_SWAP_Y; - } - else if(orientation == TS_ORIENTATION_LANDSCAPE_ROT180) - { - tsOrientation = TS_SWAP_XY; - } - else - { - tsOrientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - tsDriver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - tsDriver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } -#else /* USE_STM32412G_DISCOVERY_REVD */ - ts_status = TS_DEVICE_NOT_FOUND; -#endif /* USE_STM32412G_DISCOVERY_REVD */ - } - return (ts_status); -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - uint8_t ts_status = TS_OK; - - /* Msp Init of GPIO used for TS_INT pin coming from TouchScreen driver IC FT6x36 */ - /* When touchscreen is operated in interrupt mode */ - BSP_TS_INT_MspInit(); - - /* Enable and set the TS_INT EXTI Interrupt to an intermediate priority */ - HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn)); - - /* Enable the TS in interrupt mode */ - /* In that case the INT output of FT6206 when new touch is available */ - /* is active on low level and directed on EXTI */ - tsDriver->EnableIT(I2C_Address); - - return (ts_status); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0}; - static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0}; - uint8_t ts_status = TS_OK; - uint16_t tmp; - uint16_t Raw_x[TS_MAX_NB_TOUCH]; - uint16_t Raw_y[TS_MAX_NB_TOUCH]; - uint16_t xDiff; - uint16_t yDiff; - uint32_t index; -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint32_t weight = 0; - uint32_t area = 0; - uint32_t event = 0; -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - /* Check and update the number of touches active detected */ - TS_State->touchDetected = tsDriver->DetectTouch(I2C_Address); - if(TS_State->touchDetected) - { - for(index=0; index < TS_State->touchDetected; index++) - { - /* Get each touch coordinates */ - tsDriver->GetXY(I2C_Address, &(Raw_x[index]), &(Raw_y[index])); - - if(tsOrientation & TS_SWAP_XY) - { - tmp = Raw_x[index]; - Raw_x[index] = Raw_y[index]; - Raw_y[index] = tmp; - } - - if(tsOrientation & TS_SWAP_X) - { - Raw_x[index] = FT_6206_MAX_WIDTH_HEIGHT - 1 - Raw_x[index]; - } - - if(tsOrientation & TS_SWAP_Y) - { - Raw_y[index] = FT_6206_MAX_WIDTH_HEIGHT - 1 - Raw_y[index]; - } - - xDiff = Raw_x[index] > _x[index]? (Raw_x[index] - _x[index]): (_x[index] - Raw_x[index]); - yDiff = Raw_y[index] > _y[index]? (Raw_y[index] - _y[index]): (_y[index] - Raw_y[index]); - - if ((xDiff + yDiff) > 5) - { - _x[index] = Raw_x[index]; - _y[index] = Raw_y[index]; - } - - - TS_State->touchX[index] = _x[index]; - TS_State->touchY[index] = _y[index]; - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - - /* Get touch info related to the current touch */ - ft6x06_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event); - - /* Update TS_State structure */ - TS_State->touchWeight[index] = weight; - TS_State->touchArea[index] = area; - - /* Remap touch event */ - switch(event) - { - case FT6206_TOUCH_EVT_FLAG_PRESS_DOWN : - TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; - break; - case FT6206_TOUCH_EVT_FLAG_LIFT_UP : - TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; - break; - case FT6206_TOUCH_EVT_FLAG_CONTACT : - TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; - break; - case FT6206_TOUCH_EVT_FLAG_NO_EVENT : - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(event) */ - -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* of for(index=0; index < TS_State->touchDetected; index++) */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - /* Get gesture Id */ - ts_status = BSP_TS_Get_GestureId(TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* end of if(TS_State->touchDetected != 0) */ - - return (ts_status); -} - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Update gesture Id following a touch detected. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State) -{ - uint32_t gestureId = 0; - uint8_t ts_status = TS_OK; - - /* Get gesture Id */ - ft6x06_TS_GetGestureID(I2C_Address, &gestureId); - - /* Remap gesture Id to a TS_GestureIdTypeDef value */ - switch(gestureId) - { - case FT6206_GEST_ID_NO_GESTURE : - TS_State->gestureId = GEST_ID_NO_GESTURE; - break; - case FT6206_GEST_ID_MOVE_UP : - TS_State->gestureId = GEST_ID_MOVE_UP; - break; - case FT6206_GEST_ID_MOVE_RIGHT : - TS_State->gestureId = GEST_ID_MOVE_RIGHT; - break; - case FT6206_GEST_ID_MOVE_DOWN : - TS_State->gestureId = GEST_ID_MOVE_DOWN; - break; - case FT6206_GEST_ID_MOVE_LEFT : - TS_State->gestureId = GEST_ID_MOVE_LEFT; - break; - case FT6206_GEST_ID_ZOOM_IN : - TS_State->gestureId = GEST_ID_ZOOM_IN; - break; - case FT6206_GEST_ID_ZOOM_OUT : - TS_State->gestureId = GEST_ID_ZOOM_OUT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(gestureId) */ - - return(ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Function used to reset all touch data before a new acquisition - * of touch information. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if OK, TE_ERROR if problem found. - */ -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State) -{ - uint8_t ts_status = TS_ERROR; - uint32_t index; - - if (TS_State != (TS_StateTypeDef *)NULL) - { - TS_State->gestureId = GEST_ID_NO_GESTURE; - TS_State->touchDetected = 0; - - for(index = 0; index < TS_MAX_NB_TOUCH; index++) - { - TS_State->touchX[index] = 0; - TS_State->touchY[index] = 0; - TS_State->touchArea[index] = 0; - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - TS_State->touchWeight[index] = 0; - } - - ts_status = TS_OK; - - } /* of if (TS_State != (TS_StateTypeDef *)NULL) */ - - return (ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -/** - * @brief Function used to Hardware reset the touch screen. - */ -void BSP_TS_Reset(void) -{ - /* TouchScreen IC controller reset sequence */ - HAL_GPIO_WritePin(TS_RST_GPIO_PORT, TS_RST_PIN, GPIO_PIN_RESET); - HAL_Delay(10); - HAL_GPIO_WritePin(TS_RST_GPIO_PORT, TS_RST_PIN, GPIO_PIN_SET); - - while (HAL_GPIO_ReadPin(TS_RST_GPIO_PORT , TS_RST_PIN)!= GPIO_PIN_RESET); - while (HAL_GPIO_ReadPin(TS_INT_GPIO_PORT , TS_INT_PIN)!= GPIO_PIN_SET); -} - -/** - * @brief Initializes the TS_INT pin MSP. - */ -__weak void BSP_TS_INT_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - TS_INT_GPIO_CLK_ENABLE(); - - /* Configure Interrupt mode for TS_INT pin falling edge : when a new touch is available */ - /* TS_INT pin is active on low level on new touch available */ - gpio_init_structure.Pin = TS_INT_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure); - - /* Configure reset pin */ - TS_RST_GPIO_CLK_ENABLE(); - gpio_init_structure.Pin = TS_RST_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - HAL_GPIO_Init(TS_RST_GPIO_PORT, &gpio_init_structure); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.h b/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.h deleted file mode 100644 index faa2b2fdee..0000000000 --- a/Drivers/BSP/STM32412G-Discovery/stm32412g_discovery_ts.h +++ /dev/null @@ -1,200 +0,0 @@ -/** - ****************************************************************************** - * @file stm32412g_discovery_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32412g_discovery_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32412G_DISCOVERY_TS_H -#define __STM32412G_DISCOVERY_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32412g_discovery.h" -#include "stm32412g_discovery_lcd.h" - -/* Include TouchScreen component driver */ -#include "../Components/ft6x06/ft6x06.h" -#if defined (USE_STM32412G_DISCOVERY_REVD) -#include "../Components/ft3x67/ft3x67.h" -#endif /* USE_STM32412G_DISCOVERY_REVD */ -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY - * @{ - */ - -/** @addtogroup STM32412G_DISCOVERY_TS - * @{ - */ - - /** @defgroup STM32412G_DISCOVERY_TS_Exported_Constants STM32412G Discovery TS Exported Constants - * @{ - */ -/** @brief With FT6206 : maximum 2 touches detected simultaneously - */ -#define TS_MAX_NB_TOUCH ((uint32_t) FT6206_MAX_DETECTABLE_TOUCH) - -#define TS_NO_IRQ_PENDING ((uint8_t) 0) -#define TS_IRQ_PENDING ((uint8_t) 1) - -#define TS_SWAP_NONE ((uint8_t) 0x01) -#define TS_SWAP_X ((uint8_t) 0x02) -#define TS_SWAP_Y ((uint8_t) 0x04) -#define TS_SWAP_XY ((uint8_t) 0x08) - -#define TS_ORIENTATION_PORTRAIT ((uint8_t) 0) -#define TS_ORIENTATION_LANDSCAPE ((uint8_t) 1) -#define TS_ORIENTATION_LANDSCAPE_ROT180 ((uint8_t) 2) - - /** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_TS_Exported_Types STM32412G Discovery TS Exported Types - * @{ - */ -/** -* @brief TS_StateTypeDef -* Define TS State structure -*/ -typedef struct -{ - uint8_t touchDetected; /*!< Total number of active touches detected at last scan */ - uint16_t touchX[TS_MAX_NB_TOUCH]; /*!< Touch X[0], X[1] coordinates on 12 bits */ - uint16_t touchY[TS_MAX_NB_TOUCH]; /*!< Touch Y[0], Y[1] coordinates on 12 bits */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint8_t touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */ - uint8_t touchEventId[TS_MAX_NB_TOUCH]; /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */ - uint8_t touchArea[TS_MAX_NB_TOUCH]; /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */ - uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */ -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -} TS_StateTypeDef; - -/** - * @brief TS_StatusTypeDef - * Define BSP_TS_xxx() functions possible return value, - * when status is returned by those functions. - */ -typedef enum -{ - TS_OK = 0x00, /*!< Touch Ok */ - TS_ERROR = 0x01, /*!< Touch Error */ - TS_TIMEOUT = 0x02, /*!< Touch Timeout */ - TS_DEVICE_NOT_FOUND = 0x03 /*!< Touchscreen device not found */ -} TS_StatusTypeDef; - -/** - * @brief TS_GestureIdTypeDef - * Define Possible managed gesture identification values returned by touch screen - * driver. - */ -typedef enum -{ - GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */ - GEST_ID_MOVE_UP = 0x01, /*!< Gesture Move Up */ - GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */ - GEST_ID_MOVE_DOWN = 0x03, /*!< Gesture Move Down */ - GEST_ID_MOVE_LEFT = 0x04, /*!< Gesture Move Left */ - GEST_ID_ZOOM_IN = 0x05, /*!< Gesture Zoom In */ - GEST_ID_ZOOM_OUT = 0x06, /*!< Gesture Zoom Out */ - GEST_ID_NB_MAX = 0x07 /*!< max number of gesture id */ -} TS_GestureIdTypeDef; - -/** - * @brief TS_TouchEventTypeDef - * Define Possible touch events kind as returned values - * by touch screen IC Driver. - */ -typedef enum -{ - TOUCH_EVENT_NO_EVT = 0x00, /*!< Touch Event : undetermined */ - TOUCH_EVENT_PRESS_DOWN = 0x01, /*!< Touch Event Press Down */ - TOUCH_EVENT_LIFT_UP = 0x02, /*!< Touch Event Lift Up */ - TOUCH_EVENT_CONTACT = 0x03, /*!< Touch Event Contact */ - TOUCH_EVENT_NB_MAX = 0x04 /*!< max number of touch events kind */ -} TS_TouchEventTypeDef; - -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_TS_Imported_Variables STM32412G DISCOVERY TS Imported Variables - * @{ - */ -/** - * @brief Table for touchscreen event information display on LCD : - * table indexed on enum @ref TS_TouchEventTypeDef information - */ -extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX]; - -/** - * @brief Table for touchscreen gesture Id information display on LCD : table indexed - * on enum @ref TS_GestureIdTypeDef information - */ -extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX]; -/** - * @} - */ - -/** @defgroup STM32412G_DISCOVERY_TS_Exported_Functions STM32412G Discovery TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY); -uint8_t BSP_TS_InitEx(uint16_t ts_SizeX, uint16_t ts_SizeY, uint8_t orientation); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -uint8_t BSP_TS_ITConfig(void); -void BSP_TS_Reset(void); - -/* These __weak function can be surcharged by application code in case the current settings - need to be changed for specific (example GPIO allocation) */ -void BSP_TS_INT_MspInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32412G_DISCOVERY_TS_H */ diff --git a/Drivers/BSP/STM32446E_EVAL b/Drivers/BSP/STM32446E_EVAL new file mode 160000 index 0000000000..1de2669296 --- /dev/null +++ b/Drivers/BSP/STM32446E_EVAL @@ -0,0 +1 @@ +Subproject commit 1de26692962324d3cce45834118e45efbcf98bec diff --git a/Drivers/BSP/STM32446E_EVAL/LICENSE.md b/Drivers/BSP/STM32446E_EVAL/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32446E_EVAL/README.md b/Drivers/BSP/STM32446E_EVAL/README.md deleted file mode 100644 index 5a96acbc3b..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# BSP STM32446E-EVAL Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32446e-eval.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32446e-eval** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32446E-EVAL** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32446e-eval/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ili9325](https://github.com/STMicroelectronics/stm32-ili9325) -* [stm32-mfxstm32l152](https://github.com/STMicroelectronics/stm32-mfxstm32l152) -* [stm32-n25q256a](https://github.com/STMicroelectronics/stm32-n25q256a) -* [stm32-ov5640](https://github.com/STMicroelectronics/stm32-ov5640) -* [stm32-s5k5cag](https://github.com/STMicroelectronics/stm32-s5k5cag) -* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32446E_EVAL/Release_Notes.html b/Drivers/BSP/STM32446E_EVAL/Release_Notes.html deleted file mode 100644 index fc4712435f..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/Release_Notes.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - Release Notes for STM32446E-EVAL Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32446E-EVAL Board Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32446E-EVAL Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Remove inline function optimization on LCD_IO_WriteMultipleData() API to avoid EWARM Runtime issue with Optimization (-Os) by adding the __NOINLINE macro.
  • -
  • Force LCD_IO_WriteMultipleData() to be built with -O1 optimization to avoid runtime issues if compiled with STM32CubeIDE GCC11.
  • -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32446e_eval_camera.c/.h: -
      -
    • Support ov5640 camera sensor
    • -
  • -
  • stm32446e_eval.c/.h: -
      -
    • Add OV5640 I2C address
    • -
    • Update CAMERA IO Read/Write to support ov5640 camera sensor
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32446e_eval_audio.c: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • stm32446e_eval_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehavior with SW4STM32 Toolchain
    • -
  • -
-

Dependencies

-
    -
  • This version must be used with v3.0.0 of PDM library
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32446e_eval_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm32446e_eval_qspi.c/.h: -
      -
    • QSPI write operation improvement
    • -
    • Update CS High Time
    • -
  • -
-

Backward compatibility

-
    -
  • These BSP drivers break the compatibility with previous versions.
  • -
-

Dependencies

-
    -
  • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32446e_eval_camera.h update BSP Camera driver to use the new HAL DCMI API’s: -
      -
    • Update BSP_CAMERA_Suspend() API to call HAL_DCMI_Suspend() API
    • -
    • Update BSP_CAMERA_Resume to call HAL_DCMI_Resume() API
    • -
  • -
  • stm32446e_eval.c -
      -
    • Alignment with ili9325 component V1.2.3
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F446E-EVAL_BSP_User_Manual.chm file
  • -
  • stm32446e_eval_qspi.c -
      -
    • Deactivate Timeout in memory mapped mode
    • -
    • Rename BSP_QSPI_MemoryMappedMode() API to BSP_QSPI_EnableMemoryMappedMode() API
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32446e_eval.c -
      -
    • Add AUDIO_IO_DeInit() function to align with BSP Components Common drivers V4.0.0
    • -
  • -
  • stm32446e_eval_audio.c -
      -
    • Reset audio codec before initialization
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of the STM32446E-EVAL BSP drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32446E_EVAL/_htmresc/favicon.png b/Drivers/BSP/STM32446E_EVAL/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32446E_EVAL/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32446E_EVAL/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32446E_EVAL/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32446E_EVAL/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32446E_EVAL/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32446E_EVAL/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.c deleted file mode 100644 index 3fdbb83bc5..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.c +++ /dev/null @@ -1,1329 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM32446E-EVAL evaluation - * board(MB1045) RevB from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTE - - This driver requires the stm32446e_eval_io to manage the joystick - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" -#if defined(USE_IOEXPANDER) -#include "stm32446e_eval_io.h" -#endif /* USE_IOEXPANDER */ - - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32446E_EVAL STM32446E EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL STM32446E EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_TypesDefinitions STM32446E EVAL LOW LEVEL Private TypesDefinitions - * @{ - */ -typedef struct -{ - __IO uint16_t REG; - __IO uint16_t RAM; -}LCD_CONTROLLER_TypeDef; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_Defines STM32446E EVAL LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32446E EVAL BSP Driver version number V2.1.2 - */ -#define __STM32446E_EVAL_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32446E_EVAL_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32446E_EVAL_BSP_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ -#define __STM32446E_EVAL_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32446E_EVAL_BSP_VERSION ((__STM32446E_EVAL_BSP_VERSION_MAIN << 24)\ - |(__STM32446E_EVAL_BSP_VERSION_SUB1 << 16)\ - |(__STM32446E_EVAL_BSP_VERSION_SUB2 << 8 )\ - |(__STM32446E_EVAL_BSP_VERSION_RC)) - -/* Compared to F4xG we use BANK1 rather then BANK3 since we use FMC_NE1 signal (not FMC_NE3) */ -#define FMC_BANK1_BASE ((uint32_t)(0x60000000 | 0x00000000)) -#define FMC_BANK3_BASE ((uint32_t)(0x60000000 | 0x08000000)) -#define FMC_BANK1 ((LCD_CONTROLLER_TypeDef *) FMC_BANK1_BASE) - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_Macros STM32446E EVAL LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_Variables STM32446E EVAL LOW LEVEL Private Variables - * @{ - */ - -#if defined(USE_IOEXPANDER) -const uint32_t GPIO_PIN[LEDn] = {LED1_PIN, - LED2_PIN, - LED3_PIN, - LED4_PIN}; -#else -const uint32_t GPIO_PIN[LEDn] = {LED1_PIN, - LED3_PIN}; -#endif /* USE_IOEXPANDER */ - - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, - TAMPER_BUTTON_GPIO_PORT, - KEY_BUTTON_GPIO_PORT}; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, - TAMPER_BUTTON_PIN, - KEY_BUTTON_PIN}; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, - TAMPER_BUTTON_EXTI_IRQn, - KEY_BUTTON_EXTI_IRQn}; - -USART_TypeDef* COM_USART[COMn] = {EVAL_COM1}; - -GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT}; - -GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT}; - -const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN}; - -const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN}; - -const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF}; - -const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF}; - -static FMPI2C_HandleTypeDef hEvalI2c; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_FunctionPrototypes STM32446E EVAL LOW LEVEL Private FunctionPrototypes - * @{ - */ -static void I2Cx_MspInit(void); -static void I2Cx_Init(void); -#if defined(USE_IOEXPANDER) -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg); -#endif /* USE_IOEXPANDER */ - -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); -static void I2Cx_Error(uint8_t Addr); - -static void FMC_BANK1_WriteData(uint16_t Data); -static void FMC_BANK1_WriteReg(uint8_t Reg); -static uint16_t FMC_BANK1_ReadData(void); -static void FMC_BANK1_Init(void); -static void FMC_BANK1_MspInit(void); - -/* IOExpander IO functions */ -#if defined(USE_IOEXPANDER) -void MFX_IO_Init(void); -void MFX_IO_DeInit(void); -void MFX_IO_ITConfig(void); -void MFX_IO_Delay(uint32_t Delay); -void MFX_IO_Write(uint16_t Addr, uint8_t Reg, uint8_t Value); -uint8_t MFX_IO_Read(uint16_t Addr, uint8_t Reg); -uint16_t MFX_IO_ReadMultiple(uint16_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void MFX_IO_Wakeup(void); -void MFX_IO_EnableWakeupPin(void); -#endif /* USE_IOEXPANDER */ - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteData(uint16_t Data); -void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size); -void LCD_IO_WriteReg(uint8_t Reg); -uint16_t LCD_IO_ReadData(uint16_t Reg); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* CAMERA IO functions */ -void CAMERA_IO_Init(void); -void CAMERA_Delay(uint32_t Delay); -void CAMERA_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t CAMERA_IO_Read(uint8_t Addr, uint16_t Reg); - -/* I2C EEPROM IO function */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - - -/** - * @} - */ - - - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Private_Functions STM32446E EVAL LOW LEVEL Private Functions - * @{ - */ - - /** - * @brief This method returns the STM32446E EVAL BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM32446E_EVAL_BSP_VERSION; -} - -/** - * @brief Configures LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ -#if !defined(USE_STM32446E_EVAL_REVA) - GPIO_InitTypeDef gpio_init_structure; - - /* On RevB led1 and Led3 are on GPIO while Led2 and Led4 on Mfx*/ - if ((Led == LED1) || (Led == LED3)) - { - /* Enable the GPIO_LED clock */ - LEDx_GPIO_CLK_ENABLE(); - - /* Configure the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - HAL_GPIO_Init(LEDx_GPIO_PORT, &gpio_init_structure); - - /* By default, turn off LED */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); - } - else /* Led2 and Led4 */ - { -#endif /* !USE_STM32446E_EVAL_REVA */ - -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* Initialize the IO functionalities (Mfx) */ - BSP_IO_Init(); - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - /* - in case of RevB just led 2 and led4 on IOEXPANDER (Mfx) */ - BSP_IO_ConfigPin(GPIO_PIN[Led], IO_MODE_OUTPUT_PP_PU); - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_SET); -#endif /* USE_IOEXPANDER */ - -#if !defined(USE_STM32446E_EVAL_REVA) - } -#endif /* !USE_STM32446E_EVAL_REVA */ -} - -/** - * @brief DeInit LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - * @note Led DeInit does not disable the GPIO clock nor disable the Mfx - */ -void BSP_LED_DeInit(Led_TypeDef Led) -{ -#if !defined(USE_STM32446E_EVAL_REVA) - GPIO_InitTypeDef gpio_init_structure; - - /* On RevB led1 and Led3 are on GPIO while Led2 and Led4 on Mfx*/ - if ((Led == LED1) || (Led == LED3)) - { - /* Turn off LED */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); - /* DeInit the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - HAL_GPIO_DeInit(LEDx_GPIO_PORT, gpio_init_structure.Pin); - } - else - { -#endif /* !USE_STM32446E_EVAL_REVA */ - -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - /* - in case of RevB just led 2 and led4 on IOEXPANDER (Mfx) */ - BSP_IO_ConfigPin(GPIO_PIN[Led], IO_MODE_OFF); -#endif /* USE_IOEXPANDER */ - -#if !defined(USE_STM32446E_EVAL_REVA) - } -#endif /* !USE_STM32446E_EVAL_REVA */ -} - -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ - -#if !defined(USE_STM32446E_EVAL_REVA) - /* On RevB led1 and Led3 are on GPIO while Led2 and Led4 on Mfx*/ - if ((Led == LED1) || (Led == LED3)) - { - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); - } - else - { -#endif /* !USE_STM32446E_EVAL_REVA */ - -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - /* - in case of RevB just led 2 and led4 on IOEXPANDER (Mfx) */ - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_RESET); -#endif /* USE_IOEXPANDER */ - -#if !defined(USE_STM32446E_EVAL_REVA) - } -#endif /* !USE_STM32446E_EVAL_REVA */ -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ - -#if !defined(USE_STM32446E_EVAL_REVA) - /* On RevB led1 and Led3 are on GPIO while Led2 and Led4 on Mfx*/ - if ((Led == LED1) || (Led == LED3)) - { - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); - } - else - { -#endif /* !USE_STM32446E_EVAL_REVA */ - -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - /* - in case of RevB just led 2 and led4 on IOEXPANDER (Mfx) */ - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_SET); -#endif /* USE_IOEXPANDER */ - -#if !defined(USE_STM32446E_EVAL_REVA) - } -#endif /* !USE_STM32446E_EVAL_REVA */ - -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ - -#if !defined(USE_STM32446E_EVAL_REVA) - /* On RevB led1 and Led3 are on GPIO while Led2 and Led4 on Mfx*/ - if ((Led == LED1) || (Led == LED3)) - { - HAL_GPIO_TogglePin(LEDx_GPIO_PORT, GPIO_PIN[Led]); - } - else - { -#endif /* !USE_STM32446E_EVAL_REVA */ - -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - /* - in case of RevB just led 2 and led4 on IOEXPANDER (Mfx) */ - BSP_IO_TogglePin(GPIO_PIN[Led]); -#endif /* USE_IOEXPANDER */ - -#if !defined(USE_STM32446E_EVAL_REVA) - } -#endif /* !USE_STM32446E_EVAL_REVA */ -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @arg BUTTON_KEY: Key Push Button - * @param ButtonMode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - * @note On STM32446E-EVAL evaluation board, the three buttons (Wakeup, Tamper - * and key buttons) are mapped on the same push button named "Wakeup/Tamper" - * on the board serigraphy. - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the BUTTON clock */ - BUTTONx_GPIO_CLK_ENABLE(Button); - - if(ButtonMode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - } - - if(ButtonMode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - - if(Button != BUTTON_WAKEUP) - { - gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; - } - else - { - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - } - - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Push Button DeInit. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @arg BUTTON_KEY: Key Push Button - * @note On STM32446E-EVAL evaluation board, the three buttons (Wakeup, Tamper - * and key buttons) are mapped on the same push button nammed "Wakeup/Tamper" - * on the board serigraphy. - * @note PB DeInit does not disable the GPIO clock - */ -void BSP_PB_DeInit(Button_TypeDef Button) -{ - GPIO_InitTypeDef gpio_init_structure; - - gpio_init_structure.Pin = BUTTON_PIN[Button]; - HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); -} - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @arg BUTTON_KEY: Key Push Button - * @note On STM32446E-EVAL evaluation board, the three buttons (Wakeup, Tamper - * and key buttons) are mapped on the same push button nammed "Wakeup/Tamper" - * on the board serigraphy. - * @retval The Button GPIO pin value - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - -/** - * @brief Configures COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @arg COM2 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIO clock */ - EVAL_COMx_TX_GPIO_CLK_ENABLE(COM); - EVAL_COMx_RX_GPIO_CLK_ENABLE(COM); - - /* Enable USART clock */ - EVAL_COMx_CLK_ENABLE(COM); - - /* Configure USART Tx as alternate function */ - gpio_init_structure.Pin = COM_TX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Alternate = COM_TX_AF[COM]; - HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure); - - /* Configure USART Rx as alternate function */ - gpio_init_structure.Pin = COM_RX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Alternate = COM_RX_AF[COM]; - HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure); - - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief DeInit COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @arg COM2 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_DeInit(huart); - - /* Enable USART clock */ - EVAL_COMx_CLK_DISABLE(COM); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -#if defined(USE_IOEXPANDER) -/** - * @brief Configures joystick GPIO and EXTI modes. - * @param JoyMode: Button mode. - * This parameter can be one of the following values: - * @arg JOY_MODE_GPIO: Joystick pins will be used as simple IOs - * @arg JOY_MODE_EXTI: Joystick pins will be connected to EXTI line - * with interrupt generation capability - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_JOY_Init(JOYMode_TypeDef JoyMode) -{ - uint8_t ret = 0; - - /* Initialize the IO functionalities */ - ret = BSP_IO_Init(); - - /* Configure joystick pins in IT mode */ - if(JoyMode == JOY_MODE_EXTI) - { - /* Configure IO interrupt acquisition mode */ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_IT_FALLING_EDGE_PU); - } - else - { - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_INPUT_PU); - } - - return ret; -} - - -/** - * @brief DeInit joystick GPIOs. - * @note JOY DeInit does not disable the Mfx, just set the Mfx pins in Off mode - */ -void BSP_JOY_DeInit(void) -{ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_OFF); -} - -/** - * @brief Returns the current joystick status. - * @retval Code of the joystick key pressed - * This code can be one of the following values: - * @arg JOY_NONE - * @arg JOY_SEL - * @arg JOY_DOWN - * @arg JOY_LEFT - * @arg JOY_RIGHT - * @arg JOY_UP - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - uint16_t pin_status = 0; - - /* Read the status joystick pins */ - pin_status = BSP_IO_ReadPin(JOY_ALL_PINS); - - /* Check the pressed keys */ - if((pin_status & JOY_NONE_PIN) == JOY_NONE) - { - return(JOYState_TypeDef) JOY_NONE; - } - else if(!(pin_status & JOY_SEL_PIN)) - { - return(JOYState_TypeDef) JOY_SEL; - } - else if(!(pin_status & JOY_DOWN_PIN)) - { - return(JOYState_TypeDef) JOY_DOWN; - } - else if(!(pin_status & JOY_LEFT_PIN)) - { - return(JOYState_TypeDef) JOY_LEFT; - } - else if(!(pin_status & JOY_RIGHT_PIN)) - { - return(JOYState_TypeDef) JOY_RIGHT; - } - else if(!(pin_status & JOY_UP_PIN)) - { - return(JOYState_TypeDef) JOY_UP; - } - else - { - return(JOYState_TypeDef) JOY_NONE; - } -} - -#endif /* USE_IOEXPANDER */ - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes I2C MSP. - */ -static void I2Cx_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = EVAL_I2Cx_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = EVAL_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = EVAL_I2Cx_SDA_PIN; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - EVAL_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - EVAL_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - EVAL_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_EV_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_ER_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_ER_IRQn); -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2Cx_Init(void) -{ - if(HAL_FMPI2C_GetState(&hEvalI2c) == HAL_FMPI2C_STATE_RESET) - { - hEvalI2c.Instance = EVAL_I2Cx; - hEvalI2c.Init.Timing = EVAL_I2Cx_TIMING; - hEvalI2c.Init.OwnAddress1 = 0; - hEvalI2c.Init.AddressingMode = FMPI2C_ADDRESSINGMODE_7BIT; - hEvalI2c.Init.DualAddressMode = FMPI2C_DUALADDRESS_DISABLE; - hEvalI2c.Init.OwnAddress2 = 0; - hEvalI2c.Init.GeneralCallMode = FMPI2C_GENERALCALL_DISABLE; - hEvalI2c.Init.NoStretchMode = FMPI2C_NOSTRETCH_DISABLE; - - /* Init the I2C */ - I2Cx_MspInit(); - HAL_FMPI2C_Init(&hEvalI2c); - } -} - -#if defined(USE_IOEXPANDER) - - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_FMPI2C_Mem_Write(&hEvalI2c, Addr, (uint16_t)Reg, FMPI2C_MEMADD_SIZE_8BIT, &Value, 1, 100); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t Value = 0; - - status = HAL_FMPI2C_Mem_Read(&hEvalI2c, Addr, Reg, FMPI2C_MEMADD_SIZE_8BIT, &Value, 1, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } - return Value; -} - -#endif /* USE_IOEXPANDER */ - -/** - * @brief Reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddSize: address size - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_FMPI2C_Mem_Read(&hEvalI2c, Addr, (uint16_t)Reg, MemAddSize, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddSize: address size - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_FMPI2C_Mem_Write(&hEvalI2c, Addr, (uint16_t)Reg, MemAddSize, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initialize the I2C Bus */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_FMPI2C_IsDeviceReady(&hEvalI2c, DevAddress, Trials, 1000)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param Addr: I2C Address - */ -static void I2Cx_Error(uint8_t Addr) -{ - /* De-initialize the I2C communication bus */ - HAL_FMPI2C_DeInit(&hEvalI2c); - - /* Re-Initialize the I2C communication bus */ - I2Cx_Init(); -} - -/*************************** FMC Routines ************************************/ -/** - * @brief Initializes FMC_BANK1 MSP. - */ -static void FMC_BANK1_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ /* GPIO_PIN_7 is FMC_NE1 */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15 | GPIO_PIN_7; - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 ; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); -} - - -/** - * @brief Initializes LCD IO. - */ -static void FMC_BANK1_Init(void) -{ - SRAM_HandleTypeDef hsram; - FMC_NORSRAM_TimingTypeDef sram_timing; - - /*** Configure the SRAM Bank 1 ***/ - /* Configure IPs */ - hsram.Instance = FMC_NORSRAM_DEVICE; - hsram.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - sram_timing.AddressSetupTime = 5; - sram_timing.AddressHoldTime = 1; - sram_timing.DataSetupTime = 9; - sram_timing.BusTurnAroundDuration = 0; - sram_timing.CLKDivision = 2; - sram_timing.DataLatency = 2; - sram_timing.AccessMode = FMC_ACCESS_MODE_A; - - hsram.Init.NSBank = FMC_NORSRAM_BANK1; - hsram.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - hsram.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; - hsram.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; - hsram.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; - hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - hsram.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - hsram.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - hsram.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - hsram.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; - hsram.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - hsram.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; - hsram.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; - hsram.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY; - hsram.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE; - hsram.Init.PageSize = FMC_PAGE_SIZE_NONE; - - /* Initialize the SRAM controller */ - FMC_BANK1_MspInit(); - HAL_SRAM_Init(&hsram, &sram_timing, &sram_timing); -} - - -/** - * @brief Writes register value. - * @param Data: Data to be written - */ -static void FMC_BANK1_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FMC_BANK1->RAM = Data; -} - -/** - * @brief Writes register address. - * @param Reg: Register to be written - */ -static void FMC_BANK1_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then write register */ - FMC_BANK1->REG = Reg; -} - -/** - * @brief Reads register value. - * @retval Read value - */ -static uint16_t FMC_BANK1_ReadData(void) -{ - return FMC_BANK1->RAM; -} - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -#if defined(USE_IOEXPANDER) - -/********************************* LINK MFX ***********************************/ - -/** - * @brief Initializes MFX low level. - */ -void MFX_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes MFX low level. - */ -void MFX_IO_DeInit(void) -{ -} - -/** - * @brief Configures MFX low level interrupt. - */ -void MFX_IO_ITConfig(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the GPIO EXTI clock */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_SYSCFG_CLK_ENABLE(); - - /* PA0 is the MFX_OUT_IRQ (often used for EXTI_WKUP) */ - gpio_init_structure.Pin = GPIO_PIN_0; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_LOW; - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - HAL_GPIO_Init(GPIOA, &gpio_init_structure); - - /* Enable and set GPIO EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(EXTI0_IRQn), 0x0F, 0x0F); - HAL_NVIC_EnableIRQ((IRQn_Type)(EXTI0_IRQn)); -} - -/** - * @brief MFX writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void MFX_IO_Write(uint16_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write((uint8_t) Addr, Reg, Value); -} - -/** - * @brief MFX reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t MFX_IO_Read(uint16_t Addr, uint8_t Reg) -{ - return I2Cx_Read((uint8_t) Addr, Reg); -} - -/** - * @brief MFX reads multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t MFX_IO_ReadMultiple(uint16_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple((uint8_t) Addr, (uint16_t)Reg, FMPI2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief MFX delay - * @param Delay: Delay in ms - */ -void MFX_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @brief Used by Lx family but requested for MFX component compatibility. - */ -void MFX_IO_Wakeup(void) -{ -} - -/** - * @brief Used by Lx family but requested for MXF component compatibility. - */ -void MFX_IO_EnableWakeupPin(void) -{ -} - -#endif /* USE_IOEXPANDER */ - -/********************************* LINK LCD ***********************************/ - -/** - * @brief Initializes LCD low level. - */ -void LCD_IO_Init(void) -{ - FMC_BANK1_Init(); -} - -/** - * @brief Writes data on LCD data register. - * @param Data: Data to be written - */ -void LCD_IO_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FMC_BANK1_WriteData(Data); -} - -/** - * @brief Writes multiple data on LCD data register. - * @param pData Pointer on the register value - * @param Size Size of byte to transmit to the register - * @retval None - */ -#if defined ( __GNUC__ ) && !defined (__ARMCC_VERSION) && !defined (__CC_ARM) /* GNU Compiler */ -__attribute__((optimize("O1"))) -#endif /* __GNUC__ */ -__NOINLINE void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size) -{ - uint32_t counter; - uint16_t *ptr = (uint16_t *) pData; - - for (counter = 0; counter < Size; counter+=2) - { - /* Write 16-bit Reg */ - FMC_BANK1_WriteData(*ptr); - ptr++; - } -} - -/** - * @brief Writes register on LCD register. - * @param Reg: Register to be written - */ -void LCD_IO_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then Write Reg */ - FMC_BANK1_WriteReg(Reg); -} - -/** - * @brief Reads data from LCD data register. - * @param Reg: Register to be read - * @retval Read data. - */ -uint16_t LCD_IO_ReadData(uint16_t Reg) -{ - FMC_BANK1_WriteReg(Reg); - - /* Read 16-bit Reg */ - return FMC_BANK1_ReadData(); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - - I2Cx_WriteMultiple(Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - I2Cx_ReadMultiple(Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - - read_value = tmp; - - return read_value; -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK CAMERA ********************************/ - -/** - * @brief Initializes Camera low level. - */ -void CAMERA_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Camera writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void CAMERA_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - if(Addr == CAMERA_I2C_ADDRESS_2) - { - I2Cx_WriteMultiple(Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 1); - } - else - { - /* For S5K5CAG sensor, 16 bits accesses are used */ - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - I2Cx_WriteMultiple(Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); - } -} - -/** - * @brief Camera reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint16_t CAMERA_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - if(Addr == CAMERA_I2C_ADDRESS_2) - { - I2Cx_ReadMultiple(Addr , Reg, FMPI2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 1); - } - else - { - /* For S5K5CAG sensor, 16 bits accesses are used */ - I2Cx_ReadMultiple(Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - read_value = tmp; - } - - return read_value; -} - -/** - * @brief Camera delay - * @param Delay: Delay in ms - */ -void CAMERA_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteMultiple(DevAddress, MemAddress, FMPI2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Read data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadMultiple(DevAddress, MemAddress, FMPI2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(DevAddress, Trials)); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.h deleted file mode 100644 index 3485a1e912..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval.h +++ /dev/null @@ -1,387 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval.h - * @author MCD Application Team - * @brief This file contains definitions for STM32446E_EVAL's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* IMPORTANT: in order to compile with RevA following flag shall be defined */ -/* in the preprocessor options: USE_STM32446E_EVAL_REVA !!!!!!!!!! */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_H -#define __STM32446E_EVAL_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* USE_STM32446E_EVAL_REVA must USE USE_IOEXPANDER */ -#if defined(USE_STM32446E_EVAL_REVA) -#ifndef USE_IOEXPANDER -#define USE_IOEXPANDER -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32446E_EVAL_REVA */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL STM32446E EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Exported_Types STM32446E EVAL LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ -#if defined(USE_IOEXPANDER) -LED1 = 0, -LED_GREEN = LED1, -LED2 = 1, -LED_ORANGE = LED2, -LED3 = 2, -LED_RED = LED3, -LED4 = 3, -LED_BLUE = LED4 -#else -LED1 = 0, -LED_GREEN = LED1, -LED3 = 1, -LED_RED = LED3, -#endif /* USE_IOEXPANDER */ -}Led_TypeDef; - - -typedef enum -{ - BUTTON_WAKEUP = 0, - BUTTON_TAMPER = 1, - BUTTON_KEY = 2 -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -#if defined(USE_IOEXPANDER) -typedef enum -{ - JOY_MODE_GPIO = 0, - JOY_MODE_EXTI = 1 -}JOYMode_TypeDef; - -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 -}JOYState_TypeDef; -#endif /* USE_IOEXPANDER */ - -typedef enum -{ - COM1 = 0, - COM2 = 1 -}COM_TypeDef; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Exported_Constants STM32446E EVAL LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32446E_EVAL board - */ -#if !defined (USE_STM32446E_EVAL) - #define USE_STM32446E_EVAL -#endif - -/** @addtogroup STM32446E_EVAL_LOW_LEVEL_LED STM32446E EVAL LOW LEVEL LED - * @{ - */ - -#if !defined(USE_STM32446E_EVAL_REVA) - -#if defined(USE_IOEXPANDER) -#define LEDn ((uint8_t)4) -#define LED2_PIN IO_PIN_21 -#define LED4_PIN IO_PIN_23 -#else -#define LEDn ((uint8_t)2) -#endif /* USE_IOEXPANDER */ - -#define LEDx_GPIO_PORT GPIOB -#define LEDx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LEDx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define LED1_PIN GPIO_PIN_11 -#define LED3_PIN GPIO_PIN_4 - -#else - -#define LEDn ((uint8_t)4) -#define LED1_PIN IO_PIN_20 -#define LED3_PIN IO_PIN_22 -#define LED2_PIN IO_PIN_21 -#define LED4_PIN IO_PIN_23 - -#endif /* !USE_STM32446E_EVAL_REVA */ - - -/** - * @} - */ - -/** @addtogroup STM32446E_EVAL_LOW_LEVEL_BUTTON STM32446E EVAL LOW LEVEL BUTTON - * @{ - */ -/* Joystick pins are connected to IO Expander (accessible through FMPI2C interface) */ -#define BUTTONn ((uint8_t)3) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_13 -#define WAKEUP_BUTTON_GPIO_PORT GPIOC -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Tamper push-button - */ -#define TAMPER_BUTTON_PIN GPIO_PIN_13 -#define TAMPER_BUTTON_GPIO_PORT GPIOC -#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Key push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_13 -#define KEY_BUTTON_GPIO_PORT GPIOC -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief MFX Irq Out Pin - */ -#define MFX_IRQOUT_PIN GPIO_PIN_0 -#define MFX_IRQOUT_GPIO_PORT GPIOA -#define MFX_IRQOUT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define MFX_IRQOUT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define MFX_IRQOUT_EXTI_IRQn EXTI0_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {WAKEUP_BUTTON_GPIO_CLK_ENABLE();} else\ - if((__INDEX__) == 1) {TAMPER_BUTTON_GPIO_CLK_ENABLE();} else\ - {KEY_BUTTON_GPIO_CLK_ENABLE(); }} while(0) - -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\ - ((__INDEX__) == 1) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() : KEY_BUTTON_GPIO_CLK_DISABLE()) -/** - * @} - */ - -/** @addtogroup STM32446E_EVAL_LOW_LEVEL_COM STM32446E EVAL LOW LEVEL COM - * @{ - */ -#define COMn ((uint8_t)1) - -/** - * @brief Definition for COM port1, connected to USART1 - */ -#define EVAL_COM1 USART1 -#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() -#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE() - -#define EVAL_COM1_TX_PIN GPIO_PIN_9 -#define EVAL_COM1_TX_GPIO_PORT GPIOA -#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define EVAL_COM1_TX_AF GPIO_AF7_USART1 - -#define EVAL_COM1_RX_PIN GPIO_PIN_10 -#define EVAL_COM1_RX_GPIO_PORT GPIOA -#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define EVAL_COM1_RX_AF GPIO_AF7_USART1 - -#define EVAL_COM1_IRQn USART1_IRQn - -#define EVAL_COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {EVAL_COM1_CLK_ENABLE();} } while(0) -#define EVAL_COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? EVAL_COM1_CLK_DISABLE() : 0) - -#define EVAL_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {EVAL_COM1_TX_GPIO_CLK_ENABLE();} } while(0) -#define EVAL_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? EVAL_COM1_TX_GPIO_CLK_DISABLE() : 0) - -#define EVAL_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {EVAL_COM1_RX_GPIO_CLK_ENABLE();} } while(0) -#define EVAL_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? EVAL_COM1_RX_GPIO_CLK_DISABLE() : 0) - -/** - * @brief Joystick Pins definition - */ -#if defined(USE_IOEXPANDER) - -#define JOY_SEL_PIN IO_PIN_5 -#define JOY_UP_PIN IO_PIN_4 -#define JOY_DOWN_PIN IO_PIN_3 -#define JOY_LEFT_PIN IO_PIN_2 -#define JOY_RIGHT_PIN IO_PIN_1 -#define JOY_NONE_PIN JOY_ALL_PINS -#define JOY_ALL_PINS (IO_PIN_5 | IO_PIN_1 | IO_PIN_2 | IO_PIN_3 | IO_PIN_4) - -#endif /* USE_IOEXPANDER */ - -/** - * @brief Eval Pins definition connected to MFX - */ - -#if defined(USE_IOEXPANDER) - -#define XSDN_PIN IO_PIN_10 -#define RSTI_PIN IO_PIN_11 -#define CAM_PLUG_PIN IO_PIN_12 -#define AUDIO_INT_PIN IO_PIN_5 -#define OTG_FS1_OVER_CURRENT_PIN IO_PIN_6 -#define OTG_FS1_POWER_SWITCH_PIN IO_PIN_7 -#define OTG_FS2_OVER_CURRENT_PIN IO_PIN_8 -#define SD_DETECT_PIN IO_PIN_15 - -#endif /* USE_IOEXPANDER */ - - -/* Exported constant IO ------------------------------------------------------*/ - -/* The MFX_I2C_ADDR input pin selects the MFX I2C device address - MFX_I2C_ADDR input pin MFX I2C device address - 0 b: 1000 010x (0x84) - 1 b: 1000 011x (0x86) - This input is sampled during the MFX firmware startup. */ - -#define IO_I2C_ADDRESS ((uint16_t)0x84) /*mfx MFX_I2C_ADDR 0*/ -#define IO_I2C_ADDRESS_2 ((uint16_t)0x86) /*mfx MFX_I2C_ADDR 1*/ -#define TS_I2C_ADDRESS ((uint16_t)0x84) /*mfx MFX_I2C_ADDR 0*/ -#define TS_I2C_ADDRESS_2 ((uint16_t)0x86) /*mfx MFX_I2C_ADDR 1*/ - - -#define CAMERA_I2C_ADDRESS ((uint16_t)0x5A) -#define CAMERA_I2C_ADDRESS_2 ((uint16_t)0x78) -#define AUDIO_I2C_ADDRESS ((uint16_t)0x34) -#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) -#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) - - -/* User can use this section to tailor I2Cx/I2Cx instance used and associated - resources */ -/* Definition for I2Cx clock resources */ -#define EVAL_I2Cx FMPI2C1 -#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_FMPI2C1_CLK_ENABLE() -#define EVAL_I2Cx_CLK_DISABLE() __HAL_RCC_FMPI2C1_CLK_DISABLE() -#define EVAL_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define EVAL_I2Cx_FORCE_RESET() __HAL_RCC_FMPI2C1_FORCE_RESET() -#define EVAL_I2Cx_RELEASE_RESET() __HAL_RCC_FMPI2C1_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define EVAL_I2Cx_SCL_PIN GPIO_PIN_12 -#define EVAL_I2Cx_SCL_SDA_GPIO_PORT GPIOD -#define EVAL_I2Cx_SCL_SDA_AF GPIO_AF4_FMPI2C1 -#define EVAL_I2Cx_SDA_PIN GPIO_PIN_13 - -/* I2C interrupt requests */ -#define EVAL_I2Cx_EV_IRQn FMPI2C1_EV_IRQn -#define EVAL_I2Cx_ER_IRQn FMPI2C1_ER_IRQn - -#ifndef EVAL_I2Cx_TIMING -#define EVAL_I2Cx_TIMING ((uint32_t)0x00805252) -#endif /* EVAL_I2Cx_TIMING */ - - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Exported_Macros STM32446E EVAL LOW LEVEL Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LOW_LEVEL_Exported_Functions STM32446E EVAL LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart); -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart); -#if defined(USE_IOEXPANDER) -uint8_t BSP_JOY_Init(JOYMode_TypeDef JoyMode); -void BSP_JOY_DeInit(void); -JOYState_TypeDef BSP_JOY_GetState(void); -void BSP_MFX_reg_access_for_debug(void); -#endif /* USE_IOEXPANDER */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.c deleted file mode 100644 index 39745caf68..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.c +++ /dev/null @@ -1,1329 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_audio.c - * @author MCD Application Team - * @version V2.0.0 - * @date 27-January-2017 - * @brief This file provides the Audio driver for the STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM32446E-EVAL (MB1045) Evaluation boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, SAI, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec or the MFX has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER : only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Speaker and Headphone are used as outputs for the audio stream - at the same time. - Note. On STM32446E-EVAL SAI_DMA is configured in CIRCULAR mode. Due to this the application - does NOT need to call BSP_AUDIO_OUT_ChangeBuffer() to assure streaming. - + Call the function BSP_EVAL_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm32446e_eval_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, the audio frame slot, - the device output mode the mute or the stop, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetAudioFrameSlot(), BSP_AUDIO_OUT_SetOutputMode(), - BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the stm32446e_eval_audio.h file. - - -Driver architecture: --------------------- - + This driver provides the High Audio Layer: consists of the function API exported in the stm32446e_eval_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32446e_eval_audio_codec.c file (I2Sx_Init(), I2Sx_DeInit(), SAIx_Init() and SAIx_DeInit()) - -Known Limitations: ------------------- - 1- If the TDM Format used to play in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_AUDIO STM32446E EVAL AUDIO - * @brief This file includes the low layer driver for wm8994 Audio Codec - * available on STM32446E-EVAL evaluation board(MB1045). - * @{ - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Private_Types STM32446E EVAL AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Private_Defines STM32446E EVAL AUDIO Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Private_Macros STM32446E EVAL AUDIO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Private_Variables STM32446E EVAL AUDIO Private Variables - * @{ - */ - -/* -Note: - these global variables are not compliant to naming rules (upper case without "_" ), - but we keep this naming for compatibility, in fact these variables (not static) - could have been used by the application, example the stm32f4xx_it.c: - void DMA2_Stream6_IRQHandler(void) - { HAL_DMA_IRQHandler(haudio_out_sai.hdmatx); } -*/ -AUDIO_DrvTypeDef *audio_drv; -SAI_HandleTypeDef haudio_out_sai; -I2S_HandleTypeDef haudio_in_i2s; -TIM_HandleTypeDef haudio_tim; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -uint8_t Channel_Demux[128] = { - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f -}; - -uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Private_Function_Prototypes STM32446E EVAL AUDIO Private Function Prototypes - * @{ - */ -static void SAIx_Init(uint32_t AudioFreq); -static void SAIx_DeInit(void); -static void I2Sx_Init(uint32_t AudioFreq); -static void I2Sx_DeInit(void); -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim); -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim); -static void TIMx_Init(void); -static void TIMx_DeInit(void); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_out_Private_Functions STM32446E EVAL AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The I2S PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - uint32_t deviceid = 0x00; - - SAIx_DeInit(); - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* SAI data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to SAI peripheral */ - haudio_out_sai.Instance = AUDIO_SAIx; - if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET) - { - /* Init the SAI MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL); - } - SAIx_Init(AudioFreq); - - /* wm8994 codec initialization */ - deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS); - - if((deviceid) == WM8994_ID) - { - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Resets the audio codec. */ - audio_drv->Reset(AUDIO_I2C_ADDRESS); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pBuffer, DMA_MAX(Size / AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the SAI interface. - * @param pData: pointer on data address - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_SAI_DMAPause(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief This function Resumes the audio file stream. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause/resume function */ - HAL_SAI_DMAResume(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_SAI_DMAStop(&haudio_out_sai); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(1); - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frequency configuration */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Updates the Audio frame slot configuration. - * @param AudioFrameSlot: specifies the audio Frame slot - * This parameter can be any value of @ref CODEC_AudioFrame_SLOT_TDMMode - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frame slot. - */ -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot) -{ - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.SlotInit.SlotActive = AudioFrameSlot; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinit the audio peripherals. - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - SAIx_DeInit(); - /* DeInit the SAI MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_OUT_MspDeInit(&haudio_out_sai, NULL); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32446e_eval_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32446e_eval_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief SAI error callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) -{ - static DMA_HandleTypeDef hdma_sai_tx; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable SAI clock */ - AUDIO_SAIx_CLK_ENABLE(); - - /* Enable GPIO clock */ - AUDIO_SAIx_MCLK_SCK_ENABLE(); - AUDIO_SAIx_SD_FS_ENABLE(); - - /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SD_FS_AF; - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SD_PIN; - HAL_GPIO_Init(AUDIO_SAIx_SD_FS_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SD_FS_AF; - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - HAL_GPIO_Init(AUDIO_SAIx_MCLK_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Alternate = AUDIO_SAIx_SCK_AF; - gpio_init_structure.Pin = AUDIO_SAIx_SCK_PIN ; - HAL_GPIO_Init(AUDIO_SAIx_MCLK_SCK_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_SAIx_DMAx_CLK_ENABLE(); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Configure the hdma_sai_tx handle parameters */ - hdma_sai_tx.Init.Channel = AUDIO_SAIx_DMAx_CHANNEL; - hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE; - hdma_sai_tx.Init.MemDataAlignment = AUDIO_SAIx_DMAx_MEM_DATA_SIZE; - hdma_sai_tx.Init.Mode = DMA_CIRCULAR; - hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_sai_tx.Instance = AUDIO_SAIx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_sai_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_sai_tx); - } - - /* SAI DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_SAIx_DMAx_IRQ); -} - -/** - * @brief Deinitializes SAI MSP. - * @param hsai: SAI handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* SAI DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_SAIx_DMAx_IRQ); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hsai->hdmatx); - } - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(hsai); - - /* Deactives CODEC_SAI pins FS, SCK, MCK and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_SD_FS_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_MCLK_SCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_SAIx_SCK_PIN ; - HAL_GPIO_DeInit(AUDIO_SAIx_MCLK_SCK_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable SAI clock */ - AUDIO_SAIx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hsai: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params: pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLSAI prescalers */ - /* PLLSAI_VCO: VCO_429M - SAI_CLK(first level) = PLLSAI_VCO/PLLSAIQ = 429/2 = 214.5 Mhz - SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ = 214.5/19 = 11.289 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI2; - rcc_ex_clk_init_struct.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLSAI; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIM = 8; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIN = 429; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIQ = 2; - rcc_ex_clk_init_struct.PLLSAIDivQ = 19; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */ - { - /* SAI clock config - PLLSAI_VCO: VCO_344M - SAI_CLK(first level) = PLLSAI_VCO/PLLSAIQ = 344/7 = 49.142 Mhz - SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI2; - rcc_ex_clk_init_struct.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLSAI; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIM = 8; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIN = 344; - rcc_ex_clk_init_struct.PLLSAI.PLLSAIQ = 7; - rcc_ex_clk_init_struct.PLLSAIDivQ = 1; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (SAI). - * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. - * @note The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 - * and user can update this configuration using - */ -static void SAIx_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioOutSai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Configure SAI_Block_x - LSBFirst: Disabled - DataSize: 16 */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - haudio_out_sai.Init.ClockSource = SAI_CLKSOURCE_PLLSAI; - haudio_out_sai.Init.AudioMode = SAI_MODEMASTER_TX; - haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE; - haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL; - haudio_out_sai.Init.DataSize = SAI_DATASIZE_16; - haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB; - haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE; - haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS; - haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLE; - haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF; - - /* Configure SAI_Block_x Frame - Frame Length: 64 - Frame active Length: 32 - FS Definition: Start frame + Channel Side identification - FS Polarity: FS active Low - FS Offset: FS asserted one bit before the first bit of slot 0 */ - haudio_out_sai.FrameInit.FrameLength = 64; - haudio_out_sai.FrameInit.ActiveFrameLength = 32; - haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; - haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; - haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; - - /* Configure SAI Block_x Slot - Slot First Bit Offset: 0 - Slot Size : 16 - Slot Number: 4 - Slot Active: All slot actives */ - haudio_out_sai.SlotInit.FirstBitOffset = 0; - haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE; - haudio_out_sai.SlotInit.SlotNumber = 4; - haudio_out_sai.SlotInit.SlotActive = CODEC_AUDIOFRAME_SLOT_0123; - - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (SAI). - */ -static void SAIx_DeInit(void) -{ - /* Initialize the hAudioOutSai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - HAL_SAI_DeInit(&haudio_out_sai); -} - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_in_Private_Functions STM32446E EVAL AUDIO IN Private Functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - I2Sx_DeInit(); - - /* Initialize I2S clock */ - BSP_AUDIO_IN_ClockConfig(&haudio_in_i2s, NULL); - - /* Configure the PDM library */ - PDMDecoder_Init(AudioFreq, ChnlNbr, ChnlNbr); - - /* Configure the I2S peripheral */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - if(HAL_I2S_GetState(&haudio_in_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&haudio_in_i2s, NULL); - } - I2Sx_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&haudio_in_i2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* TIMx Peripheral clock disable */ - AUDIO_TIMx_CLK_DISABLE(); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Deinit the audio IN peripherals. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - I2Sx_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_IN_MspDeInit(&haudio_in_i2s, NULL); - TIMx_DeInit(); -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf) -{ - uint8_t app_pdm[INTERNAL_BUFF_SIZE*2]; - uint8_t byte1 = 0, byte2 = 0; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; index> 8)& 0xFF; - byte1 = (PDMBuf[index] & 0xFF); - app_pdm[(index*2)+1] = Channel_Demux[byte1 & CHANNEL_DEMUX_MASK] | Channel_Demux[byte2 & CHANNEL_DEMUX_MASK] << 4; - app_pdm[(index*2)] = Channel_Demux[(byte1 >> 1) & CHANNEL_DEMUX_MASK] | Channel_Demux[(byte2 >> 1) & CHANNEL_DEMUX_MASK] << 4; - } - - for(index = 0; index < DEFAULT_AUDIO_IN_CHANNEL_NBR; index++) - { - /* PDM to PCM filter */ - PDM_Filter((uint8_t*)&app_pdm[index], (uint16_t*)&(PCMBuf[index]), &PDM_FilterHandler[index]); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - - /** - * @brief Rx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Rx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32446e_eval_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32446e_eval_audio.h) */ - BSP_AUDIO_IN_Error_Callback(); -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/** - * @brief Initializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2s_rx; - GPIO_InitTypeDef gpio_init_structure; - - /* Configure the Timer which clocks the MEMS */ - /* Moved inside MSP to allow applic to redefine the TIMx_MspInit */ - TIMx_Init(); - - /* Enable I2S clock */ - AUDIO_I2Sx_CLK_ENABLE(); - - /* Enable SCK and SD GPIO clock */ - AUDIO_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE(); - /* CODEC_I2S pins configuration: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - gpio_init_structure.Alternate = AUDIO_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_rx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL; - hdma_i2s_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_rx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_rx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_rx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_rx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_rx.Instance = AUDIO_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2s_rx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_rx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - static DMA_HandleTypeDef hdma_i2s_rx; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params: pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_IN_Init() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Configure PLLI2S prescalers */ - /* I2S_CLK = PLLI2S_VCO/PLLI2SR = 384/2 = 192 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1; /*SPI3 & TIM4 on APB1*/ - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 384; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* I2S2 peripheral configuration */ - haudio_in_i2s.Init.AudioFreq = 4 * AudioFreq; - haudio_in_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2s.Init.CPOL = I2S_CPOL_HIGH; - haudio_in_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - haudio_in_i2s.Init.Mode = I2S_MODE_MASTER_RX; - haudio_in_i2s.Init.Standard = I2S_STANDARD_LSB; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_in_i2s); - - /* Disable I2S block */ - __HAL_I2S_ENABLE(&haudio_in_i2s); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2s); -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable peripherals and GPIO Clocks --------------------------------------*/ - /* TIMx Peripheral clock enable */ - AUDIO_TIMx_CLK_ENABLE(); - - /* Enable GPIO Channels Clock */ - AUDIO_TIMx_GPIO_CLK_ENABLE(); - - /* Configure I/Os ----------------------------------------------------------*/ - /* Common configuration for all channels */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_TIMx_AF; - - /* Configure TIM input channel */ - gpio_init_structure.Pin = AUDIO_TIMx_IN_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); - - /* Configure TIM output channel */ - gpio_init_structure.Pin = AUDIO_TIMx_OUT_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); - -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Disable TIMx Peripheral clock */ - AUDIO_TIMx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_Init(void) -{ - TIM_IC_InitTypeDef s_ic_config; - TIM_OC_InitTypeDef s_oc_config; - TIM_ClockConfigTypeDef s_clk_source_config; - TIM_SlaveConfigTypeDef s_slave_config; - - /* Configure the TIM peripheral --------------------------------------------*/ - /* Set TIMx instance */ - haudio_tim.Instance = AUDIO_TIMx; - /* Timer Input Capture Configuration Structure declaration */ - /* Initialize TIMx peripheral as follow: - + Period = 0xFFFF - + Prescaler = 0 - + ClockDivision = 0 - + Counter direction = Up - */ - haudio_tim.Init.Period = 1; - haudio_tim.Init.Prescaler = 0; - haudio_tim.Init.ClockDivision = 0; - haudio_tim.Init.CounterMode = TIM_COUNTERMODE_UP; - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspInit(&haudio_tim); - HAL_TIM_IC_Init(&haudio_tim); - - /* Configure the Input Capture channel -------------------------------------*/ - /* Configure the Input Capture of channel 2 */ - s_ic_config.ICPolarity = TIM_ICPOLARITY_FALLING; - s_ic_config.ICSelection = TIM_ICSELECTION_DIRECTTI; - s_ic_config.ICPrescaler = TIM_ICPSC_DIV1; - s_ic_config.ICFilter = 0; - HAL_TIM_IC_ConfigChannel(&haudio_tim, &s_ic_config, AUDIO_TIMx_IN_CHANNEL); - - /* Select external clock mode 1 */ - s_clk_source_config.ClockSource = TIM_CLOCKSOURCE_ETRMODE1; - s_clk_source_config.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED; - s_clk_source_config.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_clk_source_config.ClockFilter = 0; - HAL_TIM_ConfigClockSource(&haudio_tim, &s_clk_source_config); - - /* Select Input Channel as input trigger */ - s_slave_config.InputTrigger = TIM_TS_TI1FP1; - s_slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; - s_slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED; - s_slave_config.TriggerPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_slave_config.TriggerFilter = 0; - HAL_TIM_SlaveConfigSynchronization(&haudio_tim, &s_slave_config); - - /* Output Compare PWM Mode configuration: Channel2 */ - s_oc_config.OCMode = TIM_OCMODE_PWM1; - s_oc_config.OCIdleState = TIM_OCIDLESTATE_SET; - s_oc_config.Pulse = 1; - s_oc_config.OCPolarity = TIM_OCPOLARITY_HIGH; - s_oc_config.OCNPolarity = TIM_OCNPOLARITY_HIGH; - s_oc_config.OCFastMode = TIM_OCFAST_DISABLE; - s_oc_config.OCNIdleState = TIM_OCNIDLESTATE_SET; - - /* Initialize the TIM4 Channel2 with the structure above */ - HAL_TIM_PWM_ConfigChannel(&haudio_tim, &s_oc_config, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM4 Channel2 */ - HAL_TIM_PWM_Start(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM4 Channel1 */ - HAL_TIM_IC_Start(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_DeInit(void) -{ - haudio_tim.Instance = AUDIO_TIMx; - - /* Stop the TIM4 Channel2 */ - HAL_TIM_PWM_Stop(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - /* Stop the TIM4 Channel1 */ - HAL_TIM_IC_Stop(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); - - HAL_TIM_IC_DeInit(&haudio_tim); - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspDeInit(&haudio_tim); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.h deleted file mode 100644 index 64f7300b25..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_audio.h +++ /dev/null @@ -1,308 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_audio.h - * @author MCD Application Team - * @version V2.0.0 - * @date 27-January-2017 - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_AUDIO_H -#define __STM32446E_EVAL_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/wm8994/wm8994.h" -#include "stm32446e_eval.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @addtogroup STM32446E_EVAL_AUDIO - * @{ - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Exported_Types STM32446E EVAL AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Exported_Constants STM32446E EVAL AUDIO Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - USER SAI defines parameters - -----------------------------------------------------------------------------*/ -/** @defgroup CODEC_AudioFrame_SLOT_TDMMode STM32446E EVAL Audio Slot TDM mode - * @brief In W8994 codec the Audio frame contains 4 slots : TDM Mode - * TDM format : - * +------------------|------------------|--------------------|-------------------+ - * | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right | - * +------------------------------------------------------------------------------+ - * @{ - */ -/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */ -#define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3 -/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2 -/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3 -/** - * @} - */ - -/* SAI peripheral configuration defines */ -#define AUDIO_SAIx SAI2_Block_B -#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI2_CLK_ENABLE() -#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI2_CLK_DISABLE() -#define AUDIO_SAIx_SCK_AF GPIO_AF8_SAI2 -#define AUDIO_SAIx_MCLK_SD_FS_AF GPIO_AF10_SAI2 - - -#define AUDIO_SAIx_MCLK_SCK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define AUDIO_SAIx_MCLK_SCK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define AUDIO_SAIx_MCK_PIN GPIO_PIN_1 /* PA1 */ -#define AUDIO_SAIx_SCK_PIN GPIO_PIN_2 /* PA2 */ -#define AUDIO_SAIx_MCLK_SCK_GPIO_PORT GPIOA -#define AUDIO_SAIx_SD_FS_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define AUDIO_SAIx_SD_FS_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define AUDIO_SAIx_FS_PIN GPIO_PIN_9 /* PG9 */ -#define AUDIO_SAIx_SD_PIN GPIO_PIN_10 /* PG10 */ -#define AUDIO_SAIx_SD_FS_GPIO_PORT GPIOG - - -/* SAI DMA Stream definitions */ -#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_SAIx_DMAx_CLK_DISABLE() __HAL_RCC_DMA2_CLK_DISABLE() -#define AUDIO_SAIx_DMAx_STREAM DMA2_Stream6 -#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_3 -#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream6_IRQn -#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream6_IRQHandler - -/* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO ((uint32_t)5) /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_I2Sx SPI3 -#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_3 -#define AUDIO_I2Sx_SCK_GPIO_PORT GPIOB -#define AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_AF GPIO_AF6_SPI3 - -#define AUDIO_I2Sx_SD_PIN GPIO_PIN_1 -#define AUDIO_I2Sx_SD_GPIO_PORT GPIOC -#define AUDIO_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define AUDIO_I2Sx_SD_AF GPIO_AF5_SPI3 - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream2 -#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream2_IRQn -#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream2_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO ((uint32_t)6) /* Select the preemption priority level(0 is the highest) */ - - -/* Two channels are used: - - one channel as input which is connected to I2S SCK in stereo mode - - one channel as output which divides the frequency on the input -*/ - -#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM4_CLK_ENABLE() -#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM4_CLK_DISABLE() -#define AUDIO_TIMx TIM4 -#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 -#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ -#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_TIMx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_TIMx_GPIO_PORT GPIOB -#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_6 -#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_7 -#define AUDIO_TIMx_AF GPIO_AF2_TIM4 - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK ((uint8_t)0) -#define AUDIO_ERROR ((uint8_t)1) -#define AUDIO_TIMEOUT ((uint8_t)2) - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE (128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR) -/* PCM buffer output size */ -#define PCM_OUT_SIZE (DEFAULT_AUDIO_IN_FREQ/1000*2) -#define CHANNEL_DEMUX_MASK ((uint8_t)0x55) - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/* Delay for the Codec to be correctly reset */ -#define CODEC_RESET_DELAY ((uint8_t)5) - - -/*------------------------------------------------------------------------------ - OUTPUT DEVICES definition -------------------------------------------------------------------------------*/ - -/* Alias on existing output devices to adapt for 2 headphones output */ -#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE -#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 */ - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Exported_Variables STM32446E EVAL AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_Exported_Macros STM32446E EVAL AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_OUT_Exported_Functions STM32446E EVAL AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); -void BSP_AUDIO_OUT_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params); -void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params); -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_AUDIO_IN_Exported_Functions STM32446E EVAL AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -void BSP_AUDIO_IN_DeInit(void); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_AUDIO_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.c deleted file mode 100644 index eed3e093bb..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.c +++ /dev/null @@ -1,647 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_camera.c - * @author MCD Application Team - * @brief This file includes the driver for Camera modules mounted on - * STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How to use this driver: --------------------------- - - This driver is used to drive the camera. - - The S5K5CAG component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the camera using the BSP_CAMERA_Init() function. - o Start the camera capture/snapshot using the CAMERA_Start() function. - o Suspend, resume or stop the camera capture using the following functions: - - BSP_CAMERA_Suspend() - - BSP_CAMERA_Resume() - - BSP_CAMERA_Stop() - - + Options - o Increase or decrease on the fly the brightness and/or contrast - using the following function: - - BSP_CAMERA_ContrastBrightnessConfig - o Add a special effect on the fly using the following functions: - - BSP_CAMERA_BlackWhiteConfig() - - BSP_CAMERA_ColorEffectConfig() - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_CAMERA STM32446E EVAL CAMERA - * @{ - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_TypesDefinitions STM32446E EVAL CAMERA Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_Defines STM32446E EVAL CAMERA Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_Macros STM32446E EVAL CAMERA Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_Variables STM32446E EVAL CAMERA Private Variables - * @{ - */ - - /* -Note: - camera_drv variable is not compliant to naming rules (upper case without "_" ), - but we keep this naming for compatibility, in fact these variables (not static) - could have been used by the application, example the stm32f4xx_it.c. -*/ -CAMERA_DrvTypeDef *camera_drv; - -static DCMI_HandleTypeDef hDcmiEval; -uint32_t currentResolution; -static uint32_t cameraHwAddress; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_FunctionPrototypes STM32446E EVAL CAMERA Private FunctionPrototypes - * @{ - */ -static uint32_t GetSize(uint32_t Resolution); -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Private_Functions STM32446E EVAL CAMERA Private Functions - * @{ - */ - -/** - * @brief Initializes the camera. - * @param Resolution: camera resolution - * @retval Camera status - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution) -{ - DCMI_HandleTypeDef *phdcmi; - - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hDcmiEval; - - /*** Configures the DCMI to interface with the camera module ***/ - /* DCMI configuration */ - phdcmi->Init.CaptureRate = DCMI_CR_ALL_FRAME; - phdcmi->Init.HSPolarity = DCMI_HSPOLARITY_HIGH; - phdcmi->Init.SynchroMode = DCMI_SYNCHRO_HARDWARE; - phdcmi->Init.VSPolarity = DCMI_VSPOLARITY_HIGH; - phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B; - phdcmi->Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; - phdcmi->Init.ByteSelectMode = DCMI_BSM_ALL; - phdcmi->Init.ByteSelectStart = DCMI_OEBS_ODD; - phdcmi->Init.LineSelectMode = DCMI_LSM_ALL; - phdcmi->Init.LineSelectStart = DCMI_OELS_ODD; - phdcmi->Instance = DCMI; - - /* Configure IO functionalities for CAMERA detect pin */ - BSP_IO_Init(); - - /* Apply Camera hardware reset */ - BSP_CAMERA_HwReset(); - - /* Check if the CAMERA is plugged */ - if(BSP_IO_ReadPin(CAM_PLUG_PIN)) - { - return CAMERA_ERROR; - } - - if (s5k5cag_ReadID(CAMERA_I2C_ADDRESS) == S5K5CAG_ID) - { - /* Initialize the camera driver structure */ - camera_drv = &s5k5cag_drv; - cameraHwAddress = CAMERA_I2C_ADDRESS; - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(&hDcmiEval, NULL); - HAL_DCMI_Init(phdcmi); - - /* Camera Init */ - camera_drv->Init(cameraHwAddress, Resolution); - - currentResolution = Resolution; - - /* Return CAMERA_OK status */ - ret = CAMERA_OK; - } - else if(ov5640_ReadID(CAMERA_I2C_ADDRESS_2) == OV5640_ID) - { - /* Initialize the camera driver structure */ - camera_drv = &ov5640_drv; - cameraHwAddress = CAMERA_I2C_ADDRESS_2; - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(&hDcmiEval, NULL); - HAL_DCMI_Init(phdcmi); - - /* Camera Module Initialization via I2C to the wanted 'Resolution' */ - camera_drv->Init(cameraHwAddress, Resolution); - - currentResolution = Resolution; - - /* Return CAMERA_OK status */ - ret = CAMERA_OK; - } - else - { - /* No supported camera sensor found */ - ret = CAMERA_ERROR; - } - - return ret; -} - - -/** - * @brief DeInitializes the camera. - * @retval Camera status - */ -uint8_t BSP_CAMERA_DeInit(void) -{ - hDcmiEval.Instance = DCMI; - - HAL_DCMI_DeInit(&hDcmiEval); - BSP_CAMERA_MspDeInit(&hDcmiEval, NULL); - return CAMERA_OK; -} - -/** - * @brief Starts the camera capture in continuous mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_ContinuousStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hDcmiEval, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(currentResolution)); -} - -/** - * @brief Starts the camera capture in snapshot mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_SnapshotStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hDcmiEval, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(currentResolution)); -} - -/** - * @brief Suspend the CAMERA capture - */ -void BSP_CAMERA_Suspend(void) -{ - /* Suspend the Camera Capture */ - HAL_DCMI_Suspend(&hDcmiEval); -} - -/** - * @brief Resume the CAMERA capture - */ -void BSP_CAMERA_Resume(void) -{ - /* Start the Camera Capture */ - HAL_DCMI_Resume(&hDcmiEval); -} - -/** - * @brief Stop the CAMERA capture - * @retval Camera status - */ -uint8_t BSP_CAMERA_Stop(void) -{ - DCMI_HandleTypeDef *phdcmi; - - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hDcmiEval; - - if(HAL_DCMI_Stop(phdcmi) == HAL_OK) - { - ret = CAMERA_OK; - } - - /* Set Camera in Power Down */ - BSP_CAMERA_PwrDown(); - - return ret; -} - -/** - * @brief CAMERA hardware reset - */ -void BSP_CAMERA_HwReset(void) -{ - /* Camera sensor RESET sequence */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - - /* Assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_SET); - - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); - - HAL_Delay(100); /* RST and XSDN signals asserted during 100ms */ - - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - - HAL_Delay(3); /* RST de-asserted and XSDN asserted during 3ms */ - - /* De-assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_SET); - - HAL_Delay(6); /* RST de-asserted during 3ms */ -} - -/** - * @brief CAMERA power down - */ -void BSP_CAMERA_PwrDown(void) -{ - /* Camera power down sequence */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); -} - -/** - * @brief Configures the camera contrast and brightness. - * @param contrast_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_CONTRAST_LEVEL4: for contrast +2 - * @arg CAMERA_CONTRAST_LEVEL3: for contrast +1 - * @arg CAMERA_CONTRAST_LEVEL2: for contrast 0 - * @arg CAMERA_CONTRAST_LEVEL1: for contrast -1 - * @arg CAMERA_CONTRAST_LEVEL0: for contrast -2 - * @param brightness_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_BRIGHTNESS_LEVEL4: for brightness +2 - * @arg CAMERA_BRIGHTNESS_LEVEL3: for brightness +1 - * @arg CAMERA_BRIGHTNESS_LEVEL2: for brightness 0 - * @arg CAMERA_BRIGHTNESS_LEVEL1: for brightness -1 - * @arg CAMERA_BRIGHTNESS_LEVEL0: for brightness -2 - */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(cameraHwAddress, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level); - } -} - -/** - * @brief Configures the camera white balance. - * @param Mode: black_white mode - * This parameter can be one of the following values: - * @arg CAMERA_BLACK_WHITE_BW - * @arg CAMERA_BLACK_WHITE_NEGATIVE - * @arg CAMERA_BLACK_WHITE_BW_NEGATIVE - * @arg CAMERA_BLACK_WHITE_NORMAL - */ -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(cameraHwAddress, CAMERA_BLACK_WHITE, Mode, 0); - } -} - -/** - * @brief Configures the camera color effect. - * @param Effect: Color effect - * This parameter can be one of the following values: - * @arg CAMERA_COLOR_EFFECT_ANTIQUE - * @arg CAMERA_COLOR_EFFECT_BLUE - * @arg CAMERA_COLOR_EFFECT_GREEN - * @arg CAMERA_COLOR_EFFECT_RED - */ -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(cameraHwAddress, CAMERA_COLOR_EFFECT, Effect, 0); - } -} - -/** - * @brief Handles DCMI interrupt request. - */ -void BSP_CAMERA_IRQHandler(void) -{ - HAL_DCMI_IRQHandler(&hDcmiEval); -} - -/** - * @brief Handles DMA interrupt request. - */ -void BSP_CAMERA_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(hDcmiEval.DMA_Handle); -} - -/** - * @brief Get the capture size. - * @param Resolution: the current resolution. - * @retval capture size. - */ -static uint32_t GetSize(uint32_t Resolution) -{ - uint32_t size = 0; - - /* Get capture size */ - switch (Resolution) - { - case CAMERA_R160x120: - { - size = 0x2580; - } - break; - case CAMERA_R320x240: - { - size = 0x9600; - } - break; - case CAMERA_R480x272: - { - size = 0xFF00; - } - break; - case CAMERA_R640x480: - { - size = 0x25800; - } - break; - default: - { - break; - } - } - - return size; -} - -/** - * @brief Initializes the DCMI MSP. - * @param hdcmi: HDMI handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params) -{ - static DMA_HandleTypeDef hdma_eval; - GPIO_InitTypeDef gpio_init_structure; - - /*** Enable peripherals and GPIO clocks ***/ - /* Enable DCMI clock */ - __HAL_RCC_DCMI_CLK_ENABLE(); - - /* Enable DMA2 clock */ - __HAL_RCC_DMA2_CLK_ENABLE(); - - /* Enable GPIO clocks */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - - /*** Configure the GPIO ***/ - /* Configure DCMI GPIO as alternate function */ - gpio_init_structure.Pin = GPIO_PIN_4 | GPIO_PIN_6; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOA, &gpio_init_structure); - -#if !defined(USE_STM32446E_EVAL_REVA) - gpio_init_structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9; -#else - gpio_init_structure.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9; -#endif // !USE_STM32446E_EVAL_REVA - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOB, &gpio_init_structure); - - gpio_init_structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - -#if !defined(USE_STM32446E_EVAL_REVA) - gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_6; -#else - gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_6; -#endif // !USE_STM32446E_EVAL_REVA - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - - /*** Configure the DMA ***/ - /* Set the parameters to be configured */ - hdma_eval.Init.Channel = DMA_CHANNEL_1; - hdma_eval.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_eval.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_eval.Init.MemInc = DMA_MINC_ENABLE; - hdma_eval.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_eval.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_eval.Init.Mode = DMA_CIRCULAR; - hdma_eval.Init.Priority = DMA_PRIORITY_HIGH; - hdma_eval.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_eval.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_eval.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_eval.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_eval.Instance = DMA2_Stream1; - - /* Associate the initialized DMA handle to the DCMI handle */ - __HAL_LINKDMA(hdcmi, DMA_Handle, hdma_eval); - - /*** Configure the NVIC for DCMI and DMA ***/ - /* NVIC configuration for DCMI transfer complete interrupt */ - HAL_NVIC_SetPriority(DCMI_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DCMI_IRQn); - - /* NVIC configuration for DMA2D transfer complete interrupt */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_Init(hdcmi->DMA_Handle); -} - - -/** - * @brief DeInitializes the DCMI MSP. - * @param hdcmi: HDMI handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params) -{ - /* Disable NVIC for DCMI transfer complete interrupt */ - HAL_NVIC_DisableIRQ(DCMI_IRQn); - - /* Disable NVIC for DMA2 transfer complete interrupt */ - HAL_NVIC_DisableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_DeInit(hdcmi->DMA_Handle); - - /* Disable DCMI clock */ - __HAL_RCC_DCMI_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Line event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_LineEventCallback(); -} - -/** - * @brief Line Event callback. - */ -__weak void BSP_CAMERA_LineEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_LineEventCallback could be implemented in the user file - */ -} - -/** - * @brief VSYNC event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_VsyncEventCallback(); -} - -/** - * @brief VSYNC Event callback. - */ -__weak void BSP_CAMERA_VsyncEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_VsyncEventCallback could be implemented in the user file - */ -} - -/** - * @brief Frame event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_FrameEventCallback(); -} - -/** - * @brief Frame Event callback. - */ -__weak void BSP_CAMERA_FrameEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_FrameEventCallback could be implemented in the user file - */ -} - -/** - * @brief Error callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_ErrorCallback(); -} - -/** - * @brief Error callback. - */ -__weak void BSP_CAMERA_ErrorCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_ErrorCallback could be implemented in the user file - */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.h deleted file mode 100644 index 648fa5df37..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_camera.h +++ /dev/null @@ -1,130 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_camera.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_camera.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_CAMERA_H -#define __STM32446E_EVAL_CAMERA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include Camera component Driver */ -#include "../Components/s5k5cag/s5k5cag.h" -#include "../Components/ov5640/ov5640.h" - -/* Include IO Driver */ -#include "stm32446e_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @addtogroup STM32446E_EVAL_CAMERA - * @{ - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Exported_Types STM32446E EVAL CAMERA Exported Types - * @{ - */ - -/** - * @brief Camera State structures definition - */ -typedef enum -{ - CAMERA_OK = 0x00, - CAMERA_ERROR = 0x01, - CAMERA_TIMEOUT = 0x02 -}Camera_StatusTypeDef; - -#define RESOLUTION_R160x120 CAMERA_R160x120 /* QQVGA Resolution */ -#define RESOLUTION_R320x240 CAMERA_R320x240 /* QVGA Resolution */ -#define RESOLUTION_R480x272 CAMERA_R480x272 /* 480x272 Resolution */ -#define RESOLUTION_R640x480 CAMERA_R640x480 /* VGA Resolution */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Exported_Constants STM32446E EVAL CAMERA Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_CAMERA_Exported_Functions STM32446E EVAL CAMERA Exported Functions - * @{ - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution); -uint8_t BSP_CAMERA_DeInit(void); -void BSP_CAMERA_ContinuousStart(uint8_t *buff); -void BSP_CAMERA_SnapshotStart(uint8_t *buff); -void BSP_CAMERA_Suspend(void); -void BSP_CAMERA_Resume(void); -uint8_t BSP_CAMERA_Stop(void); -void BSP_CAMERA_HwReset(void); -void BSP_CAMERA_PwrDown(void); -void BSP_CAMERA_LineEventCallback(void); -void BSP_CAMERA_VsyncEventCallback(void); -void BSP_CAMERA_FrameEventCallback(void); -void BSP_CAMERA_ErrorCallback(void); - -/* Camera features functions prototype */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level); -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode); -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect); - -/* To be called in DCMI_IRQHandler function */ -void BSP_CAMERA_IRQHandler(void); -/* To be called in DMA2_Stream1_IRQHandler function */ -void BSP_CAMERA_DMA_IRQHandler(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params); -void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params); - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_CAMERA_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.c deleted file mode 100644 index 4b2fe6cddb..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.c +++ /dev/null @@ -1,452 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24LR64 - * EEPROM memory. - * To be able to use this driver, the switch EE_M24LR64 must be defined - * in your toolchain compiler preprocessor - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24LR64) is available on separate daughter - * board ANT7-M24LR-A, which is not provided with the STM32446E_EVAL - * board. - * To use this driver you have to connect the ANT7-M24LR-A to CN3 - * connector of STM32446E_EVAL board. - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm32446e_eval.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm32446e_eval.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and BSP_EEPROM_WritePage()) use DMA mode to perform the data - * transfer to/from EEPROM memory. - * - * @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform - * small write (less than 1 page) BUT The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24LR64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0(GND) | 1 (0V) | - * | . | AC0 | 2 | - * | . | AC1 | 3 | - * | . | VSS | 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | . | E1(GND) | 7 (0V) | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_EEPROM STM32446E EVAL EEPROM - * @brief This file includes the I2C EEPROM driver of STM32446E-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Types STM32446E EVAL EEPROM Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Defines STM32446E EVAL EEPROM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Macros STM32446E EVAL EEPROM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Variables STM32446E EVAL EEPROM Private Variables - * @{ - */ -__IO uint16_t EEPROMAddress = 0; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Function_Prototypes STM32446E EVAL EEPROM Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Private_Functions STM32446E EVAL EEPROM Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * - * @note There are 2 different versions of M24LR64 (A01 & A02). - * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) - * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address for A01 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A01; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* Select the EEPROM address for A02 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A02; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - } - return EEPROM_OK; -} - -/** - * @brief DeInitializes the EEPROM. - * @retval EEPROM state - */ -uint8_t BSP_EEPROM_DeInit(void) -{ - /* I2C won't be disabled because common to other functionalities */ - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage== 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.h deleted file mode 100644 index 2470861eb7..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_eeprom.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32446e_eval_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F446E_EVAL_EEPROM_H -#define __STM32F446E_EVAL_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_EEPROM STM32446E EVAL EEPROM - * @brief This file includes the I2C EEPROM driver of STM32446E-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Exported_Types STM32446E EVAL EEPROM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Exported_Constants STM32446E EVAL EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE ((uint8_t)4) -#define EEPROM_MAX_SIZE ((uint16_t)0x2000) /* 64Kbit */ - - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS ((uint32_t)3000) - -#define EEPROM_OK ((uint32_t)0) -#define EEPROM_FAIL ((uint32_t)1) -#define EEPROM_TIMEOUT ((uint32_t)2) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Exported_Macros STM32446E EVAL EEPROM Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_EEPROM_Exported_Functions STM32446E EVAL EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint8_t BSP_EEPROM_DeInit(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occurs during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_EEPROM_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.c deleted file mode 100644 index 77190cd26e..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.c +++ /dev/null @@ -1,300 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_io.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the IO pins - * on STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IO module of the STM32446E-EVAL evaluation - board. - - The MFXSTM32L152 IO expander device component driver must be included with this - driver in order to run the IO functionalities commanded by the IO expander (MFX) - device mounted on the evaluation board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the IO module using the BSP_IO_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the IO functionalities use. - - + IO functionalities use - o The IO pin mode is configured when calling the function BSP_IO_ConfigPin(), you - must specify the desired IO mode by choosing the "IO_ModeTypedef" parameter - predefined value. - o If an IO pin is used in interrupt mode, the function BSP_IO_ITGetStatus() is - needed to get the interrupt status. To clear the IT pending bits, you should - call the function BSP_IO_ITClear() with specifying the IO pending bit to clear. - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - o The IRQ_OUT pin (common for all functionalities: TS, JOY, SD, etc) can be - configured using the function BSP_IO_ConfigIrqOutPin() - o To get/set an IO pin combination state you can use the functions - BSP_IO_ReadPin()/BSP_IO_WritePin() or the function BSP_IO_TogglePin() to toggle the pin - state. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_IO STM32446E EVAL IO - * @{ - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Types_Definitions STM32446E EVAL IO Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Defines STM32446E EVAL IO Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Macros STM32446E EVAL IO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Variables STM32446E EVAL IO Private Variables - * @{ - */ -static IO_DrvTypeDef *IoDrv = NULL; -static uint8_t mfxstm32l152Identifier; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Function_Prototypes STM32446E EVAL IO Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Private_Functions STM32446E EVAL IO Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the IO functionalities and configures all - * necessary hardware resources (MFX, ...). - * @note BSP_IO_Init() is using HAL_Delay() function to ensure that MFXSTM32L152 - * IO Expander is correctly reset. HAL_Delay() function provides accurate - * delay (in milliseconds) based on variable incremented in SysTick ISR. - * This implies that if BSP_IO_Init() is called from a peripheral ISR process, - * then the SysTick interrupt must have higher priority (numerically lower) - * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_Init(void) -{ - uint8_t ret = IO_OK; - - if ( IoDrv == NULL) - { - /* Read ID and verify the IO expander is ready */ - mfxstm32l152Identifier=0; - mfxstm32l152Identifier = mfxstm32l152_io_drv.ReadID(IO_I2C_ADDRESS); - if((mfxstm32l152Identifier == MFXSTM32L152_ID_1) || (mfxstm32l152Identifier == MFXSTM32L152_ID_2)) - { - /* Initialize the IO driver structure */ - IoDrv = &mfxstm32l152_io_drv; - } - else - { - ret = IO_ERROR; - } - - if(ret == IO_OK) - { - IoDrv->Init(IO_I2C_ADDRESS); - IoDrv->Start(IO_I2C_ADDRESS, IO_PIN_ALL); - } - } - - return ret; -} - -/** - * @brief DeInit allows Mfx Initialization to be executed again - * @note BSP_IO_Init() has no effect if the IoDrv is already initialized - * BSP_IO_DeInit() allows to erase the pointer such to allow init to be effective - * @retval IO_OK - */ -uint8_t BSP_IO_DeInit(void) -{ - IoDrv = NULL; - return IO_OK; -} - -/** - * @brief Gets the selected pins IT status. - * @param IoPin: Selected pins to check the status. - * This parameter can be any combination of the IO pins. - * @retval IO_OK if read status OK. Other value if error. - */ -uint32_t BSP_IO_ITGetStatus(uint32_t IoPin) -{ - /* Return the IO Pin IT status */ - return (IoDrv->ITStatus(IO_I2C_ADDRESS, IoPin)); -} - -/** - * @brief Clears all the IO IT pending bits. - */ -void BSP_IO_ITClear(void) -{ - /* Clear all IO IT pending bits */ - IoDrv->ClearIT(IO_I2C_ADDRESS, MFXSTM32L152_GPIO_PINS_ALL); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param IoPin: IO pin(s) to be configured. - * This parameter can be one of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @param IoMode: IO pin mode to configure - * This parameter can be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - * @arg IO_MODE_ANALOG - * @arg IO_MODE_OFF - * @arg IO_MODE_INPUT_PU, - * @arg IO_MODE_INPUT_PD, - * @arg IO_MODE_OUTPUT_OD, - * @arg IO_MODE_OUTPUT_OD_PU, - * @arg IO_MODE_OUTPUT_OD_PD, - * @arg IO_MODE_OUTPUT_PP, - * @arg IO_MODE_OUTPUT_PP_PU, - * @arg IO_MODE_OUTPUT_PP_PD, - * @arg IO_MODE_IT_RISING_EDGE_PU - * @arg IO_MODE_IT_FALLING_EDGE_PU - * @arg IO_MODE_IT_LOW_LEVEL_PU - * @arg IO_MODE_IT_HIGH_LEVEL_PU - * @arg IO_MODE_IT_RISING_EDGE_PD - * @arg IO_MODE_IT_FALLING_EDGE_PD - * @arg IO_MODE_IT_LOW_LEVEL_PD - * @arg IO_MODE_IT_HIGH_LEVEL_PD - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_ConfigPin(uint32_t IoPin, IO_ModeTypedef IoMode) -{ - /* Configure the selected IO pin(s) mode */ - IoDrv->Config(IO_I2C_ADDRESS, IoPin, IoMode); - - return IO_OK; -} - -/** - * @brief Sets the IRQ_OUT pin polarity and type - * @param IoIrqOutPinPolarity: High/Low - * @param IoIrqOutPinType: OpenDrain/PushPull - * @retval OK - */ -uint8_t BSP_IO_ConfigIrqOutPin(uint8_t IoIrqOutPinPolarity, uint8_t IoIrqOutPinType) -{ - if((mfxstm32l152Identifier == MFXSTM32L152_ID_1) || (mfxstm32l152Identifier == MFXSTM32L152_ID_2)) - { - /* Initialize the IO driver structure */ - mfxstm32l152_SetIrqOutPinPolarity(IO_I2C_ADDRESS, IoIrqOutPinPolarity); - mfxstm32l152_SetIrqOutPinType(IO_I2C_ADDRESS, IoIrqOutPinType); - } - - return IO_OK; -} - -/** - * @brief Sets the selected pins state. - * @param IoPin: Selected pins to write. - * This parameter can be any combination of the IO pins. - * @param PinState: New pins state to write - */ -void BSP_IO_WritePin(uint32_t IoPin, BSP_IO_PinStateTypeDef PinState) -{ - /* Set the Pin state */ - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, PinState); -} - -/** - * @brief Gets the selected pins current state. - * @param IoPin: Selected pins to read. - * This parameter can be any combination of the IO pins. - * @retval The current pins state - */ -uint32_t BSP_IO_ReadPin(uint32_t IoPin) -{ - return(IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin)); -} - -/** - * @brief Toggles the selected pins state. - * @param IoPin: Selected pins to toggle. - * This parameter can be any combination of the IO pins. - * @note This function is only used to toggle one pin in the same time - */ -void BSP_IO_TogglePin(uint32_t IoPin) -{ - /* Toggle the current pin state */ - if(IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin) != 0) /* Set */ - { - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 0); /* Reset */ - } - else - { - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 1); /* Set */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.h deleted file mode 100644 index e88f5d3e27..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_io.h +++ /dev/null @@ -1,138 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_io.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_io.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_IO_H -#define __STM32446E_EVAL_IO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" -/* Include IO component driver */ -#include "../Components/mfxstm32l152/mfxstm32l152.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_IO STM32446E EVAL IO - * @{ - */ - -/** @defgroup STM32446E_EVAL_IO_Exported_Types STM32446E EVAL IO Exported Types - * @{ - */ - -typedef enum -{ - BSP_IO_PIN_RESET = 0, - BSP_IO_PIN_SET = 1 -}BSP_IO_PinStateTypeDef; - -typedef enum -{ - IO_OK = 0, - IO_ERROR = 1, - IO_TIMEOUT = 2 -}IO_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Exported_Constants STM32446E EVAL IO Exported Constants - * @{ - */ -#define IO_PIN_0 ((uint32_t)0x0001) -#define IO_PIN_1 ((uint32_t)0x0002) -#define IO_PIN_2 ((uint32_t)0x0004) -#define IO_PIN_3 ((uint32_t)0x0008) -#define IO_PIN_4 ((uint32_t)0x0010) -#define IO_PIN_5 ((uint32_t)0x0020) -#define IO_PIN_6 ((uint32_t)0x0040) -#define IO_PIN_7 ((uint32_t)0x0080) -#define IO_PIN_8 ((uint32_t)0x0100) -#define IO_PIN_9 ((uint32_t)0x0200) -#define IO_PIN_10 ((uint32_t)0x0400) -#define IO_PIN_11 ((uint32_t)0x0800) -#define IO_PIN_12 ((uint32_t)0x1000) -#define IO_PIN_13 ((uint32_t)0x2000) -#define IO_PIN_14 ((uint32_t)0x4000) -#define IO_PIN_15 ((uint32_t)0x8000) -#define IO_PIN_16 ((uint32_t)0x010000) -#define IO_PIN_17 ((uint32_t)0x020000) -#define IO_PIN_18 ((uint32_t)0x040000) -#define IO_PIN_19 ((uint32_t)0x080000) -#define IO_PIN_20 ((uint32_t)0x100000) -#define IO_PIN_21 ((uint32_t)0x200000) -#define IO_PIN_22 ((uint32_t)0x400000) -#define IO_PIN_23 ((uint32_t)0x800000) -#define IO_PIN_ALL ((uint32_t)0xFFFFFF) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Exported_Macro STM32446E EVAL IO Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_IO_Exported_Functions STM32446E EVAL IO Exported Functions - * @{ - */ -uint8_t BSP_IO_Init(void); -uint8_t BSP_IO_DeInit(void); -uint8_t BSP_IO_ConfigIrqOutPin(uint8_t IoIrqOutPinPolarity, uint8_t IoIrqOutPinType); -uint32_t BSP_IO_ITGetStatus(uint32_t IoPin); -void BSP_IO_ITClear(void); -uint8_t BSP_IO_ConfigPin(uint32_t IoPin, IO_ModeTypedef IoMode); -void BSP_IO_WritePin(uint32_t IoPin, BSP_IO_PinStateTypeDef PinState); -uint32_t BSP_IO_ReadPin(uint32_t IoPin); -void BSP_IO_TogglePin(uint32_t IoPin); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_IO_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.c deleted file mode 100644 index 902693984b..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.c +++ /dev/null @@ -1,1026 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive indirectly an LCD TFT. - - This driver supports the ILI9325 LCD mounted on MB785 daughter board - - The ILI9325 component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - - + Display on LCD - o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_LCD STM32446E EVAL LCD - * @{ - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_TypesDefinitions STM32446E EVAL LCD Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_Defines STM32446E EVAL LCD Private Defines - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + Z)->X)) -#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_Macros STM32446E EVAL LCD Private Macros - * @{ - */ -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_Variables STM32446E EVAL LCD Private Variables - * @{ - */ -LCD_DrawPropTypeDef DrawProp; -static LCD_DrvTypeDef *LcdDrv; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_FunctionPrototypes STM32446E EVAL LCD Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Private_Functions STM32446E EVAL LCD Private Functions - * @{ - */ - -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - uint8_t ret = LCD_ERROR; - - /* Default value for draw propriety */ - DrawProp.BackColor = 0xFFFF; - DrawProp.pFont = &Font24; - DrawProp.TextColor = 0x0000; - - if(ili9325_drv.ReadID() == ILI9325_ID) - { - LcdDrv = &ili9325_drv; - - /* LCD Init */ - LcdDrv->Init(); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - ret = LCD_OK; - } - - return ret; -} - -/** - * @brief DeInitializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_DeInit(void) -{ - /* Actually LcdDrv does not provide a DeInit function */ - return LCD_OK; -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return(LcdDrv->GetLcdPixelWidth()); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return(LcdDrv->GetLcdPixelHeight()); -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint16_t BSP_LCD_GetTextColor(void) -{ - return DrawProp.TextColor; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint16_t BSP_LCD_GetBackColor(void) -{ - return DrawProp.BackColor; -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code RGB(5-6-5) - */ -void BSP_LCD_SetTextColor(uint16_t Color) -{ - DrawProp.TextColor = Color; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Background color code RGB(5-6-5) - */ -void BSP_LCD_SetBackColor(uint16_t Color) -{ - DrawProp.BackColor = Color; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp.pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp.pFont; -} - -/** - * @brief Clears the hole LCD. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint16_t Color) -{ - uint32_t counter = 0; - uint32_t y_size = 0; - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = Color; - y_size = BSP_LCD_GetYSize(); - - for(counter = 0; counter < y_size; counter++) - { - BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize()); - } - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Clears the selected line. - * @param Line: Line to be cleared - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - */ -void BSP_LCD_ClearStringLine(uint16_t Line) -{ - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = DrawProp.BackColor;; - - /* Draw a rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height); - - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp.pFont->table[(Ascii-' ') *\ - DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters on the LCD. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp.pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp.pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Check that the Start column is located in the screen */ - if ((refcolumn < 1) || (refcolumn >= 0x8000)) - { - refcolumn = 1; - } - - /* Send the string character by character on lCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp.pFont->Width; - /* Point on the next character */ - Text++; - i++; - } -} - -/** - * @brief Displays a character on the LCD. - * @param Line: Line where to display the character shape - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint16_t ret = 0; - - if(LcdDrv->ReadPixel != NULL) - { - ret = LcdDrv->ReadPixel(Xpos, Ypos); - } - - return ret; -} - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in RGB mode (5-6-5) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code) -{ - if(LcdDrv->WritePixel != NULL) - { - LcdDrv->WritePixel(Xpos, Ypos, RGB_Code); - } -} - -/** - * @brief Draws an horizontal line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawHLine != NULL) - { - LcdDrv->DrawHLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel((Xpos + index), Ypos, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws a vertical line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawVLine != NULL) - { - LcdDrv->DrawVLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel(Xpos, Ypos + index, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws an uni-line (between two points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - current_x = 0; - current_y = Radius; - - while (current_x <= current_y) - { - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp.TextColor); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } -} - -/** - * @brief Draws an poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t x = 0, y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - x = Points->X; - y = Points->Y; - Points++; - BSP_LCD_DrawLine(x, y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture (16 bpp). - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address. - */ -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t height = 0; - uint32_t width = 0; - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - SetDisplayWindow(Xpos, Ypos, width, height); - - if(LcdDrv->DrawBitmap != NULL) - { - LcdDrv->DrawBitmap(Xpos, Ypos, pbmp); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws RGB Image (16 bpp). - * @param Xpos: X position in the LCD - * @param Ypos: Y position in the LCD - * @param Xsize: X size in the LCD - * @param Ysize: Y size in the LCD - * @param pdata: Pointer to the RGB Image address. - */ -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - - SetDisplayWindow(Xpos, Ypos, Xsize, Ysize); - - if(LcdDrv->DrawRGBImage != NULL) - { - LcdDrv->DrawRGBImage(Xpos, Ypos, Xsize, Ysize, pdata); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws a full rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - BSP_LCD_SetTextColor(DrawProp.TextColor); - do - { - BSP_LCD_DrawHLine(Xpos, Ypos++, Width); - } - while(Height--); -} - -/** - * @brief Draws a full circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - - current_x = 0; - current_y = Radius; - - BSP_LCD_SetTextColor(DrawProp.TextColor); - - while (current_x <= current_y) - { - if(current_y > 0) - { - BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y); - BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y); - } - - if(current_x > 0) - { - BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x); - BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x); - } - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } - - BSP_LCD_SetTextColor(DrawProp.TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Enables the display. - */ -void BSP_LCD_DisplayOn(void) -{ - LcdDrv->DisplayOn(); -} - -/** - * @brief Disables the display. - */ -void BSP_LCD_DisplayOff(void) -{ - LcdDrv->DisplayOff(); -} - -/****************************************************************************** - Static Functions -*******************************************************************************/ - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp.pFont->Height; - width = DrawProp.pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Sets display window. - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - if(LcdDrv->SetDisplayWindow != NULL) - { - LcdDrv->SetDisplayWindow(Xpos, Ypos, Width, Height); - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.h deleted file mode 100644 index 4d79eb722f..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_lcd.h +++ /dev/null @@ -1,181 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_LCD_H -#define __STM32446E_EVAL_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" -#include "../Components/ili9325/ili9325.h" -#include "../../../Utilities/Fonts/fonts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @addtogroup STM32446E_EVAL_LCD - * @{ - */ - -/** @defgroup STM32446E_EVAL_LCD_Exported_Types STM32446E EVAL LCD Exported Types - * @{ - */ -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -}LCD_DrawPropTypeDef; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Exported_Constants STM32446E EVAL LCD Exported Constants - * @{ - */ -/** - * @brief LCD status structure definition - */ -#define LCD_OK ((uint8_t)0x00) -#define LCD_ERROR ((uint8_t)0x01) -#define LCD_TIMEOUT ((uint8_t)0x02) - -typedef struct -{ - int16_t X; - int16_t Y; -}Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* Center mode */ - RIGHT_MODE = 0x02, /* Right mode */ - LEFT_MODE = 0x03 /* Left mode */ -}Line_ModeTypdef; - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE ((uint16_t)0x001F) -#define LCD_COLOR_GREEN ((uint16_t)0x07E0) -#define LCD_COLOR_RED ((uint16_t)0xF800) -#define LCD_COLOR_CYAN ((uint16_t)0x07FF) -#define LCD_COLOR_MAGENTA ((uint16_t)0xF81F) -#define LCD_COLOR_YELLOW ((uint16_t)0xFFE0) -#define LCD_COLOR_LIGHTBLUE ((uint16_t)0x841F) -#define LCD_COLOR_LIGHTGREEN ((uint16_t)0x87F0) -#define LCD_COLOR_LIGHTRED ((uint16_t)0xFC10) -#define LCD_COLOR_LIGHTMAGENTA ((uint16_t)0xFC1F) -#define LCD_COLOR_LIGHTYELLOW ((uint16_t)0xFFF0) -#define LCD_COLOR_DARKBLUE ((uint16_t)0x0010) -#define LCD_COLOR_DARKGREEN ((uint16_t)0x0400) -#define LCD_COLOR_DARKRED ((uint16_t)0x8000) -#define LCD_COLOR_DARKCYAN ((uint16_t)0x0410) -#define LCD_COLOR_DARKMAGENTA ((uint16_t)0x8010) -#define LCD_COLOR_DARKYELLOW ((uint16_t)0x8400) -#define LCD_COLOR_WHITE ((uint16_t)0xFFFF) -#define LCD_COLOR_LIGHTGRAY ((uint16_t)0xD69A) -#define LCD_COLOR_GRAY ((uint16_t)0x8410) -#define LCD_COLOR_DARKGRAY ((uint16_t)0x4208) -#define LCD_COLOR_BLACK ((uint16_t)0x0000) -#define LCD_COLOR_BROWN ((uint16_t)0xA145) -#define LCD_COLOR_ORANGE ((uint16_t)0xFD20) - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_LCD_Exported_Functions STM32446E EVAL LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_DeInit(void); -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -uint16_t BSP_LCD_GetTextColor(void); -uint16_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetTextColor(__IO uint16_t Color); -void BSP_LCD_SetBackColor(__IO uint16_t Color); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -void BSP_LCD_Clear(uint16_t Color); -void BSP_LCD_ClearStringLine(uint16_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code); -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pbmp); -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_LCD_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.c deleted file mode 100644 index ed093d1a52..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.c +++ /dev/null @@ -1,810 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_qspi.c - * @author MCD Application Team - * @brief This file includes a standard driver for the N25Q256A QSPI - * memory mounted on STM32446E-EVAL board. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - (#) This driver is used to drive the N25Q256A QSPI external - memory mounted on STM32446E-EVAL evaluation board. - - (#) This driver need a specific component driver (N25Q256A) to be included with. - - (#) Initialization steps: - (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This - function includes the MSP layer hardware resources initialization and the - QSPI interface with the external memory. - - (#) QSPI memory operations - (++) QSPI memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_QSPI_Read()/BSP_QSPI_Write(). - (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. - (see the QSPI memory data sheet) - (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_QSPI_Erase_Chip(). - (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. - (see the QSPI memory data sheet) - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_qspi.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_QSPI STM32446E EVAL QSPI - * @{ - */ - - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup STM32446E_EVAL_QSPI_Private_Variables STM32446E EVAL QSPI Private Variables - * @{ - */ -QSPI_HandleTypeDef QSPIHandle; - -/** - * @} - */ - - - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup STM32446E_EVAL_QSPI_Private_Functions STM32446E EVAL QSPI Private Functions - * @{ - */ -static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_EnterFourBytesAddress(QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout); - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_QSPI_Exported_Functions STM32446E EVAL QSPI Exported Functions - * @{ - */ - -/** - * @brief Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Init(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level initialization */ - BSP_QSPI_MspInit(&QSPIHandle, NULL); - - /* QSPI initialization */ - QSPIHandle.Init.ClockPrescaler = 1; /* QSPI freq = 180 MHz/(1+1) = 90 Mhz */ - QSPIHandle.Init.FifoThreshold = 4; - QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; - QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q256A_FLASH_SIZE) - 1; - QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; /* Min 50ns for nonRead commands */ - QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; - QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; - QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; - - if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* QSPI memory reset */ - if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Set the QSPI memory in 4-bytes address mode */ - if (QSPI_EnterFourBytesAddress(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Configuration of the dummy cycles on QSPI memory side */ - if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - return QSPI_OK; -} - -/** - * @brief De-Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_DeInit(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level De-initialization */ - BSP_QSPI_MspDeInit(&QSPIHandle, NULL); - - return QSPI_OK; -} - -/** - * @brief Reads an amount of data from the QSPI memory. - * @param pData: Pointer to data to be read - * @param ReadAddr: Read start address - * @param Size: Size of data to read - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the read command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.Address = ReadAddr; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q256A_DUMMY_CYCLES_READ_QUAD; - s_command.NbData = Size; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Set S# timing for Read command: Min 20ns for N25Q256A memory */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Restore S# timing for nonRead commands */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); - - return QSPI_OK; -} - -/** - * @brief Writes an amount of data to the QSPI memory. - * @param pData: Pointer to data to be written - * @param WriteAddr: Write start address - * @param Size: Size of data to write - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - uint32_t end_addr, current_size, current_addr; - - /* Calculation of the size between the write address and the end of the page */ - current_size = N25Q256A_PAGE_SIZE - (WriteAddr % N25Q256A_PAGE_SIZE); - - /* Check if the size of the data is less than the remaining place in the page */ - if (current_size > Size) - { - current_size = Size; - } - - /* Initialize the address variables */ - current_addr = WriteAddr; - end_addr = WriteAddr + Size; - - /* Initialize the program command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = EXT_QUAD_IN_FAST_PROG_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Perform the write page by page */ - do - { - s_command.Address = current_addr; - s_command.NbData = current_size; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of program */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update the address and size variables for next page programming */ - current_addr += current_size; - pData += current_size; - current_size = ((current_addr + N25Q256A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q256A_PAGE_SIZE; - } while (current_addr < end_addr); - - return QSPI_OK; -} - -/** - * @brief Erases the specified block of the QSPI memory. - * @param BlockAddress: Block address to erase - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = SUBSECTOR_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.Address = BlockAddress; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q256A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Erases the entire QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Chip(void) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = BULK_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q256A_BULK_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Reads current status of the QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetStatus(void) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read flag status register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_FLAG_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg & (N25Q256A_FSR_PRERR | N25Q256A_FSR_VPPERR | N25Q256A_FSR_PGERR | N25Q256A_FSR_ERERR)) != 0) - { - return QSPI_ERROR; - } - else if ((reg & (N25Q256A_FSR_PGSUS | N25Q256A_FSR_ERSUS)) != 0) - { - return QSPI_SUSPENDED; - } - else if ((reg & N25Q256A_FSR_READY) != 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } -} - -/** - * @brief Return the configuration of the QSPI memory. - * @param pInfo: pointer on the configuration structure - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetInfo(QSPI_Info* pInfo) -{ - /* Configure the structure with the memory configuration */ - pInfo->FlashSize = N25Q256A_FLASH_SIZE; - pInfo->EraseSectorSize = N25Q256A_SUBSECTOR_SIZE; - pInfo->EraseSectorsNumber = (N25Q256A_FLASH_SIZE/N25Q256A_SUBSECTOR_SIZE); - pInfo->ProgPageSize = N25Q256A_PAGE_SIZE; - pInfo->ProgPagesNumber = (N25Q256A_FLASH_SIZE/N25Q256A_PAGE_SIZE); - - return QSPI_OK; -} - -/** - * @brief Configure the QSPI in memory-mapped mode - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_EnableMemoryMappedMode(void) -{ - QSPI_CommandTypeDef s_command; - QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; - - /* Configure the command for the read instruction */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q256A_DUMMY_CYCLES_READ_QUAD; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the memory mapped mode */ - s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; - - if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @} - */ - -/** @addtogroup STM32446E_EVAL_QSPI_Private_Functions - * @{ - */ - -/** - * @brief QSPI MSP Initialization - * This function configures the hardware resources used in this example: - * - Peripheral's clock enable - * - Peripheral's GPIO Configuration - * - NVIC configuration for QSPI interrupt - * @retval None - */ -__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*##-1- Enable peripherals and GPIO Clocks #################################*/ - /* Enable the QuadSPI memory interface clock */ - QSPI_CLK_ENABLE(); - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - /* Enable GPIO clocks */ - QSPI_CS_GPIO_CLK_ENABLE(); - QSPI_CLK_GPIO_CLK_ENABLE(); - QSPI_Dx_GPIO_CLK_ENABLE(); - - /*##-2- Configure peripheral GPIO ##########################################*/ - /* QSPI CS GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CS_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); - - /* QSPI CLK GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CLK_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); - - /* QSPI D0 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D0_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); - - /* QSPI D1 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D1_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure); - - /* QSPI D2 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D2_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure); - - /* QSPI D3 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D3_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure); -} - - -/** - * @brief QSPI MSP De-Initialization - * This function frees the hardware resources used in this example: - * - Disable the Peripheral's clock - * - Revert GPIO and NVIC configuration to their default state - * @retval None - */ -__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - /*##-1- Disable the NVIC for QSPI ###########################################*/ - HAL_NVIC_DisableIRQ(QUADSPI_IRQn); - - /*##-2- Disable peripherals and GPIO Clocks ################################*/ - /* De-Configure QSPI specific pins (not common to any other blocks) */ - HAL_GPIO_DeInit(QSPI_D0_GPIO_PORT, QSPI_D0_PIN); - HAL_GPIO_DeInit(QSPI_D1_GPIO_PORT, QSPI_D1_PIN); - HAL_GPIO_DeInit(QSPI_D2_GPIO_PORT, QSPI_D2_PIN); - HAL_GPIO_DeInit(QSPI_D3_GPIO_PORT, QSPI_D3_PIN); - - /*##-3- Reset peripherals ##################################################*/ - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - - /* Disable the QuadSPI memory interface clock */ - QSPI_CLK_DISABLE(); -} - -/** - * @brief This function reset the QSPI memory. - * @param hqspi: QSPI handle - * @retval None - */ -static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the reset enable command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = RESET_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Send the reset memory command */ - s_command.Instruction = RESET_MEMORY_CMD; - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function set the QSPI memory in 4-byte address mode - * @param hqspi: QSPI handle - * @retval None - */ -static uint8_t QSPI_EnterFourBytesAddress(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = ENTER_4_BYTE_ADDR_MODE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function configure the dummy cycles on memory side. - * @param hqspi: QSPI handle - * @retval None - */ -static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read volatile configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_VOL_CFG_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update volatile configuration register (with new dummy cycles) */ - s_command.Instruction = WRITE_VOL_CFG_REG_CMD; - MODIFY_REG(reg, N25Q256A_VCR_NB_DUMMY, (N25Q256A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q256A_VCR_NB_DUMMY))); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function send a Write Enable and wait it is effective. - * @param hqspi: QSPI handle - * @retval None - */ -static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Enable write operations */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = WRITE_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for write enabling */ - s_config.Match = N25Q256A_SR_WREN; - s_config.Mask = N25Q256A_SR_WREN; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.DataMode = QSPI_DATA_1_LINE; - - if (HAL_QSPI_AutoPolling(&QSPIHandle, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function read the SR of the memory and wait the EOP. - * @param hqspi: QSPI handle - * @param Timeout: timeout value - * @retval None - */ -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - s_config.Match = 0; - s_config.Mask = N25Q256A_SR_WIP; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - if (HAL_QSPI_AutoPolling(&QSPIHandle, &s_command, &s_config, Timeout) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.h deleted file mode 100644 index 9bbc48263f..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_qspi.h +++ /dev/null @@ -1,157 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_qspi.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_qspi.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_QSPI_H -#define __STM32446E_EVAL_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "../Components/n25q256a/n25q256a.h" - -/** @defgroup STM32446E_EVAL_QSPI STM32446E EVAL QSPI - * @{ - */ - - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup STM32446E_EVAL_QSPI_Exported_Constants STM32446E EVAL QSPI Exported Constants - * @{ - */ -/* QSPI Error codes */ -#define QSPI_OK ((uint8_t)0x00) -#define QSPI_ERROR ((uint8_t)0x01) -#define QSPI_BUSY ((uint8_t)0x02) -#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) -#define QSPI_SUSPENDED ((uint8_t)0x08) - - -/* Definition for QSPI clock resources */ -#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() -#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() -#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#if !defined(USE_STM32446E_EVAL_REVA) -#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define QSPI_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#else -#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define QSPI_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#endif // !USE_STM32446E_EVAL_REVA -#define QSPI_Dx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_Dx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() -#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() - -/* Definition for QSPI Pins */ -#define QSPI_CS_PIN GPIO_PIN_6 -#define QSPI_CS_GPIO_PORT GPIOG -#if !defined(USE_STM32446E_EVAL_REVA) -#define QSPI_CLK_PIN GPIO_PIN_3 -#define QSPI_CLK_GPIO_PORT GPIOD -#else -#define QSPI_CLK_PIN GPIO_PIN_2 -#define QSPI_CLK_GPIO_PORT GPIOB -#endif // !USE_STM32446E_EVAL_REVA -#define QSPI_D0_PIN GPIO_PIN_8 -#define QSPI_D0_GPIO_PORT GPIOF -#define QSPI_D1_PIN GPIO_PIN_9 -#define QSPI_D1_GPIO_PORT GPIOF -#define QSPI_D2_PIN GPIO_PIN_7 -#define QSPI_D2_GPIO_PORT GPIOF -#define QSPI_D3_PIN GPIO_PIN_6 -#define QSPI_D3_GPIO_PORT GPIOF - - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup STM32446E_EVAL_QSPI_Exported_Types STM32446E EVAL QSPI Exported Types - * @{ - */ -/* QSPI Info */ -typedef struct { - uint32_t FlashSize; /*!< Size of the flash */ - uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ - uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ - uint32_t ProgPageSize; /*!< Size of pages for the program operation */ - uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ -} QSPI_Info; - -/** - * @} - */ - - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup STM32446E_EVAL_QSPI_Exported_Functions STM32446E EVAL QSPI Exported Functions - * @{ - */ -uint8_t BSP_QSPI_Init (void); -uint8_t BSP_QSPI_DeInit (void); -uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); -uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_QSPI_Erase_Chip (void); -uint8_t BSP_QSPI_GetStatus (void); -uint8_t BSP_QSPI_GetInfo (QSPI_Info* pInfo); -uint8_t BSP_QSPI_EnableMemoryMappedMode(void); -/* BSP Aliased function maintained for legacy purpose */ -#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); -void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_QSPI_H */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.c deleted file mode 100644 index 297aba0ed1..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.c +++ /dev/null @@ -1,580 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM32446E-EVAL - * evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM32446E-EVAL - evaluation board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the evaluation board. - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_SD STM32446E EVAL SD - * @{ - */ - - -/** @defgroup STM32446E_EVAL_SD_Private_TypesDefinitions STM32446E EVAL SD Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Private_Defines STM32446E EVAL SD Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Private_Macros STM32446E EVAL SD Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Private_Variables STM32446E EVAL SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; -static uint8_t UseExtiModeDetection = 0; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Private_FunctionPrototypes STM32446E EVAL SD Private FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Private_Functions STM32446E EVAL SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t sd_state = MSD_OK; - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Initialize IO functionalities (MFX) used by SD detect pin */ - BSP_IO_Init(); - - /* Check if the SD card is plugged in the slot */ - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_INPUT); - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR_SD_NOT_PRESENT; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - /* HAL SD initialization */ - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(sd_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - sd_state = MSD_ERROR; - } - else - { - sd_state = MSD_OK; - } - } - - return sd_state; -} - -/** - * @brief DeInitializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_DeInit(void) -{ - uint8_t sd_state = MSD_OK; - - uSdHandle.Instance = SDIO; - - /* Set back Mfx pin to INPUT mode in case it was in exti */ - UseExtiModeDetection = 0; - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_INPUT); - - /* HAL SD deinitialization */ - if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Msp SD deinitialization */ - uSdHandle.Instance = SDIO; - BSP_SD_MspDeInit(&uSdHandle, NULL); - - return sd_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns 0 - */ -uint8_t BSP_SD_ITConfig(void) -{ - /* Configure Interrupt mode for SD detection pin */ - /* Note: disabling exti mode can be done calling SD_DeInit() */ - UseExtiModeDetection = 1; - BSP_SD_IsDetected(); - - return 0; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if((BSP_IO_ReadPin(SD_DETECT_PIN)&SD_DETECT_PIN) != SD_DETECT_PIN) - { - if (UseExtiModeDetection) - { - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_RISING_EDGE); - } - - } - else - { - status = SD_NOT_PRESENT; - if (UseExtiModeDetection) - { - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_FALLING_EDGE); - } - } - - return status; -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* SD pins are in conflict with Camera pins therefore Camera is power down */ - /* __weak function can be modified by the application */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); - HAL_Delay(100); - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_rx_handle.Init.Mode = DMA_PFCTRL; - dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_rx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_rx_handle); - - /* Configure DMA Tx parameters */ - dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_tx_handle.Init.Mode = DMA_PFCTRL; - dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_tx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_tx_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief DeInitializes the SD MSP. - * @param hsd: SD handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - - /* Disable NVIC for DMA transfer complete interrupts */ - HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); - HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - HAL_DMA_DeInit(&dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - HAL_DMA_DeInit(&dma_tx_handle); - - /* Disable NVIC for SDIO interrupts */ - HAL_NVIC_DisableIRQ(SDIO_IRQn); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* Disable SDIO clock */ - __HAL_RCC_SDIO_CLK_DISABLE(); - - /* GPIO pins clock and DMA clocks can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - * @retval None - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - * @retval None - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.h deleted file mode 100644 index cfb19b5b59..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sd.h +++ /dev/null @@ -1,144 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_SD_H -#define __STM32446E_EVAL_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" -#include "stm32446e_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @addtogroup STM32446E_EVAL_SD - * @{ - */ - -/** @defgroup STM32446E_EVAL_SD_Exported_Types STM32446E EVAL SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) -#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - -/** @defgroup STM32446E_EVAL_SD_Exported_Constants STM32446E EVAL SD Exported Constants - * @{ - */ -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Exported_Macro STM32446E EVAL SD Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SD_Exported_Functions STM32446E EVAL SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_SD_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.c deleted file mode 100644 index 69e048b3e1..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.c +++ /dev/null @@ -1,484 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_sdram.c - * @author MCD Application Team - * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory - * device mounted on STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted - on STM32446E-EVAL evaluation board. - - This driver does not need a specific component driver for the SDRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SDRAM memory. - o It contains the SDRAM initialization sequence to program the SDRAM external - device using the function BSP_SDRAM_Initialization_sequence(). Note that this - sequence is standard for all SDRAM devices, but can include some differences - from a device to another. If it is the case, the right sequence should be - implemented separately. - - + SDRAM read/write operations - o SDRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions - BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA(). - o The AHB access is performed with 16-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) halfword transfer (see the - BSP_SDRAM_MspInit() __weak function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - o You can send a command to the SDRAM device in runtime using the function - BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between - the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_sdram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_SDRAM STM32446E EVAL SDRAM - * @{ - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Types_Definitions STM32446E EVAL SDRAM Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Defines STM32446E EVAL SDRAM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Macros STM32446E EVAL SDRAM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Variables STM32446E EVAL SDRAM Private Variables - * @{ - */ -static SDRAM_HandleTypeDef sdramHandle; -static FMC_SDRAM_TimingTypeDef Timing; -static FMC_SDRAM_CommandTypeDef Command; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Function_Prototypes STM32446E EVAL SDRAM Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Private_Functions STM32446E EVAL SDRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the SDRAM device. - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_Init(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - /* Timing configuration for 90Mhz as SD clock frequency (System clock is up to 180Mhz */ - Timing.LoadToActiveDelay = 2; - Timing.ExitSelfRefreshDelay = 7; - Timing.SelfRefreshTime = 4; - Timing.RowCycleDelay = 7; - Timing.WriteRecoveryTime = 2; - Timing.RPDelay = 2; - Timing.RCDDelay = 2; - - sdramHandle.Init.SDBank = FMC_SDRAM_BANK1; - sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; - sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; - sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; - sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2; - sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; - sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; - sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; - sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; - - /* SDRAM controller initialization */ - - BSP_SDRAM_MspInit(&sdramHandle, NULL); /* __weak function can be rewritten by the applic */ - - if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM initialization sequence */ - BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); - - return sdramstatus; -} - -/** - * @brief DeInitializes the SDRAM device. - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_DeInit(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - if(HAL_SDRAM_DeInit(&sdramHandle) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM controller initialization */ - BSP_SDRAM_MspDeInit(&sdramHandle, NULL); - - return sdramstatus; -} - -/** - * @brief Programs the SDRAM device. - * @param RefreshCount: SDRAM refresh counter value - */ -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) -{ - __IO uint32_t tmpmrd = 0; - - /* Step 1: Configure a clock configuration enable command */ - Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 2: Insert 100 us minimum delay */ - /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ - HAL_Delay(1); - - /* Step 3: Configure a PALL (precharge all) command */ - Command.CommandMode = FMC_SDRAM_CMD_PALL; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 4: Configure an Auto Refresh command */ - Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 8; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 5: Program the external memory mode register */ - tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\ - SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\ - SDRAM_MODEREG_CAS_LATENCY_2 |\ - SDRAM_MODEREG_OPERATING_MODE_STANDARD |\ - SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; - - Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = tmpmrd; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 6: Set the refresh rate counter */ - /* Set the device refresh rate */ - HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); -} - -/** - * @brief Reads an mount of data from the SDRAM memory in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Reads an mount of data from the SDRAM memory in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Sends command to the SDRAM bank. - * @param SdramCmd: Pointer to SDRAM command structure - * @retval HAL status - */ -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) -{ - if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Handles SDRAM DMA transfer interrupt request. - */ -void BSP_SDRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sdramHandle.hdma); -} - -/** - * @brief Initializes SDRAM MSP. - * @param hsdram: SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOA configuration */ - gpio_init_structure.Pin = GPIO_PIN_7; - HAL_GPIO_Init(GPIOA, &gpio_init_structure); - - /* GPIOC configuration */ - gpio_init_structure.Pin = GPIO_PIN_5 | GPIO_PIN_4; - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8| GPIO_PIN_9 | GPIO_PIN_10 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_15 | GPIO_PIN_2; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); - - /* Configure common DMA parameters */ - dma_handle.Init.Channel = SDRAM_DMAx_CHANNEL; - dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; - dma_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_handle.Init.Mode = DMA_NORMAL; - dma_handle.Init.Priority = DMA_PRIORITY_HIGH; - dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; - dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dma_handle.Instance = SDRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsdram, hdma, dma_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); -} - - -/** - * @brief DeInitializes SDRAM MSP. - * @param hsdram: SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_handle.Instance = SDRAM_DMAx_STREAM; - HAL_DMA_DeInit(&dma_handle); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.h deleted file mode 100644 index 4b84180fe4..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_sdram.h +++ /dev/null @@ -1,146 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_sdram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_sdram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_SDRAM_H -#define __STM32446E_EVAL_SDRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_SDRAM STM32446E EVAL SDRAM - * @{ - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Exported_Types STM32446E EVAL SDRAM Exported Types - * @{ - */ - -/** - * @brief SDRAM status structure definition - */ -#define SDRAM_OK ((uint8_t)0x00) -#define SDRAM_ERROR ((uint8_t)0x01) - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Exported_Constants STM32446E EVAL SDRAM Exported Constants - * @{ - */ -#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000) -#define SDRAM_DEVICE_SIZE ((uint32_t)0x800000) /* SDRAM device size in Bytes */ - -/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_8 */ -#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_16 - -#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2 -/* #define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_3 */ - -#define REFRESH_COUNT ((uint32_t)0x0569) /* SDRAM refresh counter (90Mhz SD clock) */ - -#define SDRAM_TIMEOUT ((uint32_t)0xFFFF) - -/* DMA definitions for SDRAM DMA transfer */ -#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define __DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE -#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SDRAM_DMAx_STREAM DMA2_Stream0 -#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler - - -/** - * @brief FMC SDRAM Mode definition register defines - */ -#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) -#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) -#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) -#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) -#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) -#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) -#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Exported_Macro STM32446E EVAL SDRAM Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_SDRAM_Exported_Functions STM32446E EVAL SDRAM Exported Functions - * @{ - */ -uint8_t BSP_SDRAM_Init(void); -uint8_t BSP_SDRAM_DeInit(void); -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount); -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd); -void BSP_SDRAM_DMA_IRQHandler(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params); -void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params); - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_SDRAM_H */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.c b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.c deleted file mode 100644 index b1cf8d6c62..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.c +++ /dev/null @@ -1,294 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM32446E-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM32446E-EVAL - evaluation board on AMPIRE 480x272 LCD mounted on MB1046 daughter board. - - the MFXSTM32L152 IO expander device component - driver must be included in order to run the TS module commanded by the IO - expander device, the MFX IO expander device component driver must be - also included in case of interrupt mode use of the TS. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - The interrupt mode internally uses the IO functionalities driver driven by - the IO expander, to configure the IT line. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. - o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get - the interrupt status. To clear the IT pending bits, you should call the - function BSP_TS_ITClear(). - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval_ts.h" -#include "stm32446e_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_TS STM32446E EVAL TS - * @{ - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Types_Definitions STM32446E EVAL TS Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Defines STM32446E EVAL TS Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Macros STM32446E EVAL TS Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Variables STM32446E EVAL TS Private Variables - * @{ - */ -static TS_DrvTypeDef *ts_driver; -static uint16_t tsBundaryX, tsBundaryY; -static uint8_t tsOrientation; -static uint8_t AddressI2C; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Function_Prototypes STM32446E EVAL TS Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Private_Functions STM32446E EVAL TS Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, clocks..). - * @param xSize: Maximum X size of the TS area on LCD - * @param ySize: Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize) -{ - uint8_t mfxstm32l152_id = 0; - - tsBundaryX = xSize; - tsBundaryY = ySize; - - /* Initialize IO functionalities (MFX) used by TS */ - BSP_IO_Init(); - - /* Read ID and verify if the IO expander is ready */ - mfxstm32l152_id = mfxstm32l152_io_drv.ReadID(IO_I2C_ADDRESS); - if((mfxstm32l152_id == MFXSTM32L152_ID_1) || (mfxstm32l152_id == MFXSTM32L152_ID_2)) - { - /* Initialize the TS driver structure */ - ts_driver = &mfxstm32l152_ts_drv; - AddressI2C = TS_I2C_ADDRESS; - tsOrientation = TS_SWAP_NONE; - } - - - /* Initialize the TS driver */ - ts_driver->Init(AddressI2C); - ts_driver->Start(AddressI2C); - - return TS_OK; -} - -/** - * @brief DeInitializes the TouchScreen. - * @retval TS state - */ -uint8_t BSP_TS_DeInit(void) -{ - /* Actually ts_driver does not provide a DeInit function */ - return TS_OK; -} - -/** - * @brief Enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITEnable(void) -{ - /* Enable the TS ITs */ - ts_driver->EnableIT(AddressI2C); - return TS_OK; -} - -/** - * @brief Disables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITDisable(void) -{ - /* Disable the TS ITs */ - ts_driver->DisableIT(AddressI2C); - return TS_OK; -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - /* Initialize the IO */ - BSP_IO_Init(); - - /* Enable the TS ITs */ - ts_driver->EnableIT(AddressI2C); - - return TS_OK; -} - -/** - * @brief Clears all touch screen interrupts. - */ -void BSP_TS_ITClear(void) -{ - /* Clear TS IT pending bits */ - ts_driver->ClearIT(AddressI2C); -} - -/** - * @brief Gets the touch screen interrupt status. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITGetStatus(void) -{ - /* Return the TS IT status */ - return (ts_driver->GetITStatus(AddressI2C)); -} - -/** - * @brief Clears touch screen FIFO containing 128 x,y values. - */ -void BSP_TS_FIFOClear(void) -{ - /* ts.h does not foresee an API that allows clearing the FIFO */ - /* reading GetXY currently read one value from the FIFO */ - /* but the FIFO can contain up to 128 values ... */ - /* which would mean 128 I2C read. */ - /* Best is to modify ts.h (not done for compatibility with other families) */ -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x = 0, _y = 0; - uint16_t x_diff, y_diff , x , y; - uint16_t swap; - - TS_State->TouchDetected = ts_driver->DetectTouch(AddressI2C); - - if(TS_State->TouchDetected) - { - ts_driver->GetXY(AddressI2C, &x, &y); - - if(tsOrientation & TS_SWAP_X) - { - x = 4096 - x; - } - - if(tsOrientation & TS_SWAP_Y) - { - y = 4096 - y; - } - - if(tsOrientation & TS_SWAP_XY) - { - swap = y; - y = x; - x = swap; - } - - x_diff = x > _x? (x - _x): (_x - x); - y_diff = y > _y? (y - _y): (_y - y); - - if (x_diff + y_diff > 5) - { - _x = x; - _y = y; - } - - TS_State->x = (tsBundaryX * _x) >> 12; - TS_State->y = (tsBundaryY * _y) >> 12; - } - return TS_OK; -} - - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.h b/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.h deleted file mode 100644 index cda6e5292c..0000000000 --- a/Drivers/BSP/STM32446E_EVAL/stm32446e_eval_ts.h +++ /dev/null @@ -1,119 +0,0 @@ -/** - ****************************************************************************** - * @file stm32446e_eval_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32446e_eval_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32446E_EVAL_TS_H -#define __STM32446E_EVAL_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32446e_eval.h" -/* Include IOExpander(MFX) component Driver */ -#include "../Components/mfxstm32l152/mfxstm32l152.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32446E_EVAL - * @{ - */ - -/** @defgroup STM32446E_EVAL_TS STM32446E EVAL TS - * @{ - */ - -/** @defgroup STM32446E_EVAL_TS_Exported_Types STM32446E EVAL TS Exported Types - * @{ - */ -typedef struct -{ - uint16_t TouchDetected; - uint16_t x; - uint16_t y; - uint16_t z; -}TS_StateTypeDef; -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Exported_Constants STM32446E EVAL TS Exported Constants - * @{ - */ -#define TS_SWAP_NONE ((uint8_t)0x00) -#define TS_SWAP_X ((uint8_t)0x01) -#define TS_SWAP_Y ((uint8_t)0x02) -#define TS_SWAP_XY ((uint8_t)0x04) - -typedef enum -{ - TS_OK = 0x00, - TS_ERROR = 0x01, - TS_TIMEOUT = 0x02 -}TS_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Exported_Macros STM32446E EVAL TS Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32446E_EVAL_TS_Exported_Functions STM32446E EVAL TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize); -uint8_t BSP_TS_DeInit(void); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ITEnable(void); -uint8_t BSP_TS_ITDisable(void); -uint8_t BSP_TS_ITConfig(void); -uint8_t BSP_TS_ITGetStatus(void); -void BSP_TS_ITClear(void); -void BSP_TS_FIFOClear(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_TS_H */ diff --git a/Drivers/BSP/STM32469I-Discovery b/Drivers/BSP/STM32469I-Discovery new file mode 160000 index 0000000000..f79918e76d --- /dev/null +++ b/Drivers/BSP/STM32469I-Discovery @@ -0,0 +1 @@ +Subproject commit f79918e76de5310aad28ebf33365f902f51df85b diff --git a/Drivers/BSP/STM32469I-Discovery/LICENSE.md b/Drivers/BSP/STM32469I-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32469I-Discovery/README.md b/Drivers/BSP/STM32469I-Discovery/README.md deleted file mode 100644 index 427e68a8dd..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# BSP STM32469I-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32469i-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32469i-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32469I-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32469i-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22) -* [stm32-ft6x06](https://github.com/STMicroelectronics/stm32-ft6x06) -* [stm32-n25q128a](https://github.com/STMicroelectronics/stm32-n25q128a) -* [stm32-nt35510](https://github.com/STMicroelectronics/stm32-nt35510) -* [stm32-otm8009a](https://github.com/STMicroelectronics/stm32-otm8009a) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32469I-Discovery/Release_Notes.html b/Drivers/BSP/STM32469I-Discovery/Release_Notes.html deleted file mode 100644 index a47ba1e10d..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/Release_Notes.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - Release Notes for STM32469I_Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32469I_Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32469I_Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update Drivers to support new LCD controller NT35510.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32469i_discovery_audio.c/.h: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • stm32469i_discovery_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
-

Notes:

-
    -
  • This version must be used with v3.0.0 of PDM library
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_discovery_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm32469i_discovery_ts.c/.h: -
      -
    • Support of FT6336G Touch Screen
    • -
  • -
  • stm32469i_discovery_qspi.c/.h: -
      -
    • QSPI write operation improvement
    • -
    • Update CS High Time
    • -
  • -
  • stm32469i_discovery_sdram.c: -
      -
    • Update SDRAM RowBitsNumbers and ColumnBitsNumber values to address all 16MB memory size.
    • -
  • -
  • stm32469i_discovery_lcd.c: -
      -
    • Update BSP_LCD_ReadPixel for ARGB8888 and RGB888 formats
    • -
  • -
  • stm32469i_discovery_audio.c: -
      -
    • Remove static CODEC_Reset API
    • -
  • -
-

Notes:

-
    -
  • These BSP drivers break the compatibility with previous versions.
  • -
  • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_discovery_lcd.c/.h: -
      -
    • Update DSI initialization
    • -
    • Update LTDC clock value
    • -
    • Update LCD_DSI_PIXEL_DATA_FMT_RBG888 and LCD_DSI_PIXEL_DATA_FMT_RBG565 values
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F469I-Discovery_BSP_User_Manual.chm file
  • -
  • stm32469i_discovery_audio.c -
      -
    • Alignment with STM32F4xx_HAL_Driver V1.4.4
    • -
  • -
  • stm32469i_discovery_qspi.c -
      -
    • Deactivate Timeout in memory mapped mode
    • -
    • Rename BSP_QSPI_MemoryMappedMode() API to BSP_QSPI_EnableMemoryMappedMode() API
    • -
  • -
  • stm32469i_discovery_lcd.c -
      -
    • BSP_LCD_InitEx() API updated to remove use of intermediate variable Clockratio and improve calculation granularity
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_discovery_lcd.c update: -
      -
    • Add delay within BSP_LCD_Reset() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official Release for STM32469I_Discovery board drivers.
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32469I-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32469I-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32469I-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32469I-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32469I-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32469I-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32469I-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32469I-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.c deleted file mode 100644 index cbe20343aa..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.c +++ /dev/null @@ -1,943 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons, external SDRAM, external QSPI Flash, RF EEPROM, - * available on STM32469I-Discovery - * board (MB1189) RevA/B/C from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32469I_Discovery STM32469I Discovery - * @{ - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL STM32469I Discovery LOW LEVEL - * @{ - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_TypesDefinitions STM32469I Discovery LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Defines STM32469I Discovery LOW LEVEL Private Defines - * @{ - */ -/** - * @brief STM32469I Discovery BSP Driver version number V2.1.2 - */ -#define __STM32469I_DISCOVERY_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32469I_DISCOVERY_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32469I_DISCOVERY_BSP_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ -#define __STM32469I_DISCOVERY_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32469I_DISCOVERY_BSP_VERSION ((__STM32469I_DISCOVERY_BSP_VERSION_MAIN << 24)\ - |(__STM32469I_DISCOVERY_BSP_VERSION_SUB1 << 16)\ - |(__STM32469I_DISCOVERY_BSP_VERSION_SUB2 << 8 )\ - |(__STM32469I_DISCOVERY_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Macros STM32469I Discovery LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Variables STM32469I Discovery LOW LEVEL Private Variables - * @{ - */ -uint32_t GPIO_PIN[LEDn] = {LED1_PIN, - LED2_PIN, - LED3_PIN, - LED4_PIN}; - -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, - LED2_GPIO_PORT, - LED3_GPIO_PORT, - LED4_GPIO_PORT}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT }; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN }; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn }; - - -static I2C_HandleTypeDef heval_I2c1; -static I2C_HandleTypeDef heval_I2c2; - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_FunctionPrototypes STM32469I Discovery LOW LEVEL Private FunctionPrototypes - * @{ - */ -static void I2C1_MspInit(void); -static void I2C2_MspInit(void); -static void I2C1_Init(void); -static void I2C2_Init(void); - -#if defined(USE_IOEXPANDER) -static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg); -#endif /* USE_IOEXPANDER */ -static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); -static void I2C1_Error(uint8_t Addr); -static void I2C2_Error(uint8_t Addr); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - - -/* I2C EEPROM IO function */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/* TouchScreen (TS) IO functions */ -void TS_IO_Init(void); -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_Delay(uint32_t Delay); -void OTM8009A_IO_Delay(uint32_t Delay); -void NT35510_IO_Delay(uint32_t Delay); -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_BSP_Public_Functions STM32469I Discovery BSP Public Functions - * @{ - */ - - /** - * @brief This method returns the STM32469I Discovery BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM32469I_DISCOVERY_BSP_VERSION; -} - -/** - * @brief Configures LED GPIO. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - if (Led <= LED4) - { - /* Configure the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - switch(Led) - { - case LED1 : - LED1_GPIO_CLK_ENABLE(); - break; - case LED2 : - LED2_GPIO_CLK_ENABLE(); - break; - case LED3 : - LED3_GPIO_CLK_ENABLE(); - break; - case LED4 : - LED4_GPIO_CLK_ENABLE(); - break; - default : - break; - - } /* end switch */ - - HAL_GPIO_Init(GPIO_PORT[Led], &gpio_init_structure); - - /* By default, turn off LED by setting a high level on corresponding GPIO */ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); - - } /* of if (Led <= LED4) */ - -} - - -/** - * @brief DeInit LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - * @note Led DeInit does not disable the GPIO clock nor disable the Mfx - */ -void BSP_LED_DeInit(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - if (Led <= LED4) - { - /* DeInit the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - - /* Turn off LED */ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); - HAL_GPIO_DeInit(GPIO_PORT[Led], gpio_init_structure.Pin); - } - -} - -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ - if (Led <= LED4) - { - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); - } - -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ - if (Led <= LED4) - { - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); - } -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ - if (Led <= LED4) - { - HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); - } -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_USER: User Push Button - * @param Button_Mode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the BUTTON clock */ - BUTTON_GPIO_CLK_ENABLE(); - - if(Button_Mode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - } - - if(Button_Mode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Push Button DeInit. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_USER: User Push Button - * @note PB DeInit does not disable the GPIO clock - */ -void BSP_PB_DeInit(Button_TypeDef Button) -{ - GPIO_InitTypeDef gpio_init_structure; - - gpio_init_structure.Pin = BUTTON_PIN[Button]; - HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); -} - - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_USER: User Push Button - * @retval The Button GPIO pin value - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Private_Functions STM32469I Discovery LOW LEVEL Private Functions - * @{ - */ - - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes I2C MSP. - */ -static void I2C1_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - DISCO_I2C1_SCL_SDA_GPIO_CLK_ENABLE(); - -#if defined(USE_STM32469I_DISCO_REVC) - /* Perform 10 pulses on SCL to unlock I2C devices if previous I2C transaction aborted.*/ - /* This configuration is needed with STM32F469i Disco RevC when using touch screen controller FT6336U */ - gpio_init_structure.Pin = DISCO_I2C1_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = 0; - HAL_GPIO_Init( DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure ); - for(uint8_t count = 10; count > 0; count-- ) - { - HAL_GPIO_WritePin( DISCO_I2C1_SCL_SDA_GPIO_PORT, DISCO_I2C1_SCL_PIN, GPIO_PIN_SET ); - HAL_Delay(1); - HAL_GPIO_WritePin( DISCO_I2C1_SCL_SDA_GPIO_PORT, DISCO_I2C1_SCL_PIN, GPIO_PIN_RESET ); - HAL_Delay(1); - } -#endif /* USE_STM32469I_DISCO_REVC */ - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = DISCO_I2C1_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = DISCO_I2C1_SCL_SDA_AF; - HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = DISCO_I2C1_SDA_PIN; - HAL_GPIO_Init(DISCO_I2C1_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - DISCO_I2C1_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - DISCO_I2C1_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - DISCO_I2C1_RELEASE_RESET(); - - /* Enable and set I2C1 Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCO_I2C1_EV_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(DISCO_I2C1_EV_IRQn); - - /* Enable and set I2C1 Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCO_I2C1_ER_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(DISCO_I2C1_ER_IRQn); -} - -/** - * @brief Initializes I2C MSP. - */ -static void I2C2_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - DISCO_I2C2_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = DISCO_I2C2_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = DISCO_I2C2_SCL_SDA_AF; - HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = DISCO_I2C2_SDA_PIN; - HAL_GPIO_Init(DISCO_I2C2_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - DISCO_I2C2_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - DISCO_I2C2_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - DISCO_I2C2_RELEASE_RESET(); - - /* Enable and set I2C1 Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCO_I2C2_EV_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(DISCO_I2C2_EV_IRQn); - - /* Enable and set I2C1 Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCO_I2C2_ER_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(DISCO_I2C2_ER_IRQn); -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2C1_Init(void) -{ - if(HAL_I2C_GetState(&heval_I2c1) == HAL_I2C_STATE_RESET) - { - heval_I2c1.Instance = I2C1; - heval_I2c1.Init.ClockSpeed = I2C1_SCL_FREQ_KHZ; - heval_I2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; - heval_I2c1.Init.OwnAddress1 = 0; - heval_I2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - heval_I2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; - heval_I2c1.Init.OwnAddress2 = 0; - heval_I2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; - heval_I2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; - - /* Init the I2C */ - I2C1_MspInit(); - HAL_I2C_Init(&heval_I2c1); - } -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2C2_Init(void) -{ - if(HAL_I2C_GetState(&heval_I2c2) == HAL_I2C_STATE_RESET) - { - heval_I2c2.Instance = I2C2; - heval_I2c2.Init.ClockSpeed = I2C2_SCL_FREQ_KHZ; - heval_I2c2.Init.DutyCycle = I2C_DUTYCYCLE_2; - heval_I2c2.Init.OwnAddress1 = 0; - heval_I2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - heval_I2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; - heval_I2c2.Init.OwnAddress2 = 0; - heval_I2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; - heval_I2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; - - /* Init the I2C */ - I2C2_MspInit(); - HAL_I2C_Init(&heval_I2c2); - } -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -static void I2C1_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c1, - Addr, - (uint16_t)Reg, - I2C_MEMADD_SIZE_8BIT, - &Value, - 1, - 100); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2C1_Error(Addr); - } -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -static uint8_t I2C1_Read(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t Value = 0; - - status = HAL_I2C_Mem_Read(&heval_I2c1, - Addr, - Reg, - I2C_MEMADD_SIZE_8BIT, - &Value, - 1, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2C1_Error(Addr); - } - return Value; -} - -/** - * @brief Reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress: memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval HAL status - */ -static HAL_StatusTypeDef I2C1_ReadMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(&heval_I2c1, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2C1_Error(Addr); - } - return status; -} - -static HAL_StatusTypeDef I2C2_ReadMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(&heval_I2c2, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C2 error occurred */ - I2C2_Error(Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress: memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2C1_WriteMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c1, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initiaize the I2C Bus */ - I2C1_Error(Addr); - } - return status; -} - -static HAL_StatusTypeDef I2C2_WriteMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c2, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initiaize the I2C2 Bus */ - I2C2_Error(Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2C1_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(&heval_I2c1, DevAddress, Trials, 1000)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param Addr: I2C Address - */ -static void I2C1_Error(uint8_t Addr) -{ - /* De-initialize the I2C communication bus */ - HAL_I2C_DeInit(&heval_I2c1); - - /* Re-Initiaize the I2C communication bus */ - I2C1_Init(); -} - -static void I2C2_Error(uint8_t Addr) -{ - /* De-initialize the I2C2 communication bus */ - HAL_I2C_DeInit(&heval_I2c2); - - /* Re-Initiaize the I2C2 communication bus */ - I2C2_Init(); -} - -/** - * @} - */ - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2C2_Init(); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2C2_WriteMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&Value, 1); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg) -{ - uint8_t read_value = 0; - - I2C2_ReadMultiple(Addr, (uint16_t) Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); - - return read_value; -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2C1_Init(); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2C1_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Read data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2C1_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2C1_IsDeviceReady(DevAddress, Trials)); -} - -/******************************** LINK TS (TouchScreen) ***********************/ - -/** - * @brief Initialize I2C communication - * channel from MCU to TouchScreen (TS). - */ -void TS_IO_Init(void) -{ - I2C1_Init(); -} - -/** - * @brief Writes single data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2C1_Write(Addr, Reg, Value); -} - -/** - * @brief Reads single data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2C1_Read(Addr, Reg); -} - -/** - * @brief Reads multiple data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2C1_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Writes multiple data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - I2C1_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Delay function used in TouchScreen low level driver. - * @param Delay: Delay in ms - */ -void TS_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/**************************** LINK OTM8009A (Display driver) ******************/ -/** - * @brief OTM8009A delay - * @param Delay: Delay in ms - */ -void OTM8009A_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/**************************** LINK NT35510 (Display driver) ******************/ -/** - * @brief NT35510 delay - * @param Delay: Delay in ms - */ -void NT35510_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.h deleted file mode 100644 index 5570c8eccc..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery.h +++ /dev/null @@ -1,362 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32469I-Discovery LEDs, - * push-buttons hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* IMPORTANT: One of the following flags must be defined in the preprocessor */ -/* options in order to select the target board revision: !!!!!!!!!! */ -/* USE_STM32469I_DISCO_REVA */ -/* USE_STM32469I_DISCO_REVB */ -/* USE_STM32469I_DISCO_REVC */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_H -#define __STM32469I_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - - - /* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I_Discovery_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Types STM32469I Discovery LOW LEVEL Exported Types - * @{ - */ - -/** @brief Led_TypeDef - * STM32469I_Discovery board leds definitions. - */ -typedef enum -{ - LED1 = 0, - LED_GREEN = LED1, - LED2 = 1, - LED_ORANGE = LED2, - LED3 = 2, - LED_RED = LED3, - LED4 = 3, - LED_BLUE = LED4 - -} Led_TypeDef; - -/** @brief Button_TypeDef - * STM32469I_Discovery board Buttons definitions. - */ -typedef enum -{ - BUTTON_WAKEUP = 0 -} Button_TypeDef; - -#define BUTTON_USER BUTTON_WAKEUP - -/** @brief ButtonMode_TypeDef - * STM32469I_Discovery board Buttons Modes definitions. - */ -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 - -} ButtonMode_TypeDef; - -/** @addtogroup Exported_types - * @{ - */ -typedef enum -{ - PB_SET = 0, - PB_RESET = !PB_SET -} ButtonValue_TypeDef; - - -/** @brief DISCO_Status_TypeDef - * STM32469I_DISCO board Status return possible values. - */ -typedef enum -{ - DISCO_OK = 0, - DISCO_ERROR = 1 - -} DISCO_Status_TypeDef; - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Constants STM32469I Discovery LOW LEVEL Exported Constants - * @{ - */ - - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_LED STM32469I Discovery LOW LEVEL LED - * @{ - */ -/* Always four leds for all revisions of Discovery boards */ -#define LEDn ((uint8_t)4) - - -/* 4 Leds are connected to MCU directly on PG6, PD4, PD5, PK3 */ -#define LED1_GPIO_PORT ((GPIO_TypeDef*)GPIOG) -#define LED2_GPIO_PORT ((GPIO_TypeDef*)GPIOD) -#define LED3_GPIO_PORT ((GPIO_TypeDef*)GPIOD) -#define LED4_GPIO_PORT ((GPIO_TypeDef*)GPIOK) - -#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOK_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOK_CLK_DISABLE() - -#define LED1_PIN ((uint32_t)GPIO_PIN_6) -#define LED2_PIN ((uint32_t)GPIO_PIN_4) -#define LED3_PIN ((uint32_t)GPIO_PIN_5) -#define LED4_PIN ((uint32_t)GPIO_PIN_3) -/** - * @} - */ - -/** @addtogroup STM32469I_Discovery_LOW_LEVEL_BUTTON STM32469I Discovery LOW LEVEL BUTTON - * @{ - */ -/* Only one User/Wakeup button */ -#define BUTTONn ((uint8_t)1) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -/* Define the USER button as an alias of the Wakeup button */ -#define USER_BUTTON_PIN WAKEUP_BUTTON_PIN -#define USER_BUTTON_GPIO_PORT WAKEUP_BUTTON_GPIO_PORT -#define USER_BUTTON_GPIO_CLK_ENABLE() WAKEUP_BUTTON_GPIO_CLK_ENABLE() -#define USER_BUTTON_GPIO_CLK_DISABLE() WAKEUP_BUTTON_GPIO_CLK_DISABLE() -#define USER_BUTTON_EXTI_IRQn WAKEUP_BUTTON_EXTI_IRQn - -#define BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() - -/** - * @} - */ - -/** - * @brief OTG_FS1 OVER_CURRENT and POWER_SWITCH Pins definition - */ -#define AUDIO_INT_PIN GPIO_PIN_7 -#define AUDIO_INT_PORT GPIOB -#define AUDIO_INT_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define OTG_FS1_OVER_CURRENT_PIN GPIO_PIN_7 -#define OTG_FS1_OVER_CURRENT_PORT GPIOB -#define OTG_FS1_OVER_CURRENT_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define OTG_FS1_POWER_SWITCH_PIN GPIO_PIN_2 -#define OTG_FS1_POWER_SWITCH_PORT GPIOB -#define OTG_FS1_POWER_SWITCH_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -/** - * @brief SD-detect signal - */ -#define SD_DETECT_PIN ((uint32_t)GPIO_PIN_2) -#define SD_DETECT_GPIO_PORT ((GPIO_TypeDef*)GPIOG) -#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define SD_DETECT_EXTI_IRQn EXTI2_IRQn - -/** - * @brief TS_INT signal from TouchScreen when it is configured in interrupt mode - */ -#define TS_INT_PIN ((uint32_t)GPIO_PIN_5) -#define TS_INT_GPIO_PORT ((GPIO_TypeDef*)GPIOJ) -#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOJ_CLK_ENABLE() -#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOJ_CLK_DISABLE() -#define TS_INT_EXTI_IRQn EXTI9_5_IRQn - -/** - * @brief TouchScreen FT6206 Slave I2C address 1 - */ -#define TS_I2C_ADDRESS ((uint16_t)0x54) - -/** - * @brief TouchScreen FT6336G Slave I2C address 2 - */ -#define TS_I2C_ADDRESS_A02 ((uint16_t)0x70) - - -/** - * @brief Audio I2C Slave address - */ -#define AUDIO_I2C_ADDRESS ((uint16_t)0x94) - -/** - * @brief EEPROM I2C Slave address 1 - */ -#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) - -/** - * @brief EEPROM I2C Slave address 2 - */ -#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) - -/** - * @brief I2C clock speed configuration (in Hz) - * WARNING: - * Make sure that this define is not already declared in other files - * It can be used in parallel by other modules. - */ -#ifndef I2C1_SCL_FREQ_KHZ -#define I2C1_SCL_FREQ_KHZ 400000 /*!< f(I2C_SCL) = 400 kHz */ -#endif /* I2C1_SCL_FREQ_KHZ */ - -/** - * @brief User can use this section to tailor I2C1/I2C1 instance used and associated - * resources. - * Definition for I2C1 clock resources - */ -#define DISCO_I2C1 I2C1 -#define DISCO_I2C1_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define DISCO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define DISCO_I2C1_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define DISCO_I2C1_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define DISCO_I2C1_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/** @brief Definition for I2C1 Pins - */ -#define DISCO_I2C1_SCL_PIN GPIO_PIN_8 /*!< PB8 */ -#define DISCO_I2C1_SCL_SDA_GPIO_PORT GPIOB -#define DISCO_I2C1_SCL_SDA_AF GPIO_AF4_I2C1 -#define DISCO_I2C1_SDA_PIN GPIO_PIN_9 /*!< PB9 */ - -/** @brief Definition of I2C interrupt requests - */ -#define DISCO_I2C1_EV_IRQn I2C1_EV_IRQn -#define DISCO_I2C1_ER_IRQn I2C1_ER_IRQn - - - -/** - * @brief I2C2 clock speed configuration (in Hz) - * WARNING: - * Make sure that this define is not already declared in other files - * It can be used in parallel by other modules. - */ -#ifndef I2C2_SCL_FREQ_KHZ -#define I2C2_SCL_FREQ_KHZ 100000 /*!< f(I2C2_SCL) < 100 kHz */ -#endif /* I2C2_SCL_FREQ_KHZ */ - -/** - * @brief User can use this section to tailor I2C2/I2C2 instance used and associated - * resources (audio codec). - * Definition for I2C2 clock resources - */ -#define DISCO_I2C2 I2C2 -#define DISCO_I2C2_CLK_ENABLE() __HAL_RCC_I2C2_CLK_ENABLE() -#define DISCO_I2C2_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE() - -#define DISCO_I2C2_FORCE_RESET() __HAL_RCC_I2C2_FORCE_RESET() -#define DISCO_I2C2_RELEASE_RESET() __HAL_RCC_I2C2_RELEASE_RESET() - -/** @brief Definition for I2C2 Pins - */ -#define DISCO_I2C2_SCL_PIN GPIO_PIN_4 /*!< PH4 */ -#define DISCO_I2C2_SCL_SDA_GPIO_PORT GPIOH -#define DISCO_I2C2_SCL_SDA_AF GPIO_AF4_I2C2 -#define DISCO_I2C2_SDA_PIN GPIO_PIN_5 /*!< PH5 */ - -/** @brief Definition of I2C2 interrupt requests - */ -#define DISCO_I2C2_EV_IRQn I2C2_EV_IRQn -#define DISCO_I2C2_ER_IRQn I2C2_ER_IRQn - -#if !defined(USE_STM32469I_DISCO_REVA) && \ - !defined(USE_STM32469I_DISCO_REVB) && \ - !defined(USE_STM32469I_DISCO_REVC) -#define USE_STM32469I_DISCO_REVC -#endif - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Macros STM32469I Discovery LOW LEVEL Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_LOW_LEVEL_Exported_Functions STM32469I Discovery LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.c deleted file mode 100644 index 5c470751f5..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.c +++ /dev/null @@ -1,1482 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_audio.c - * @author MCD Application Team - * @version V2.0.0 - * @date 27-January-2017 - * @brief This file provides the Audio driver for the STM32469I-Discovery board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM32469I-Discovery (MB1189) Discovery boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_HEADPHONE1, - OUTPUT_DEVICE_HEADPHONE2 or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, SAI, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec or the MFX has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_HEADPHONE1 : only headphones 1 will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE2 : only headphones 2 will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Headphones are used as outputs for the audio stream - at the same time. - Note. On STM32469I-Discovery SAI_DMA is configured in CIRCULAR mode. Due to this the application - does NOT need to call BSP_AUDIO_OUT_ChangeBuffer() to assure streaming. - + Call the function BSP_Discovery_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm32469i_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, the audio frame slot, - the device output mode the mute or the stop, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetAudioFrameSlot(), BSP_AUDIO_OUT_SetOutputMode(), - BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the stm32469i_discovery_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm32469i_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32469i_discovery_audio_codec.c file (I2Sx_Init(), I2Sx_DeInit(), SAIx_Init() and SAIx_DeInit()) - -Known Limitations: ------------------- - 1- If the TDM Format used to paly in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include -#include "stm32469i_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_AUDIO STM32469I Discovery AUDIO - * @brief This file includes the low layer driver for CS43L22 Audio Codec - * available on STM32469I-Discovery board(MB1189). - * @{ - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Private_Types STM32469I Discovery AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Private_Defines STM32469I Discovery AUDIO Private Defines - * @brief Headphone1 (CN27 of STM32469I-Discovery board) is connected to the - * HEADPHONE output of CS43L22 Audio Codec. - * Headphone2 (CN26 of STM32469I-Discovery board) is connected to the - * SPEAKER output of CS43L22 Audio Codec. - * @{ - */ -#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE - -/* Headphone2 is connected to Speaker output of the CS43L22 codec */ -#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Private_Macros STM32469I Discovery AUDIO Private macros - * @{ - */ - -/*### PLAY ###*/ -/* SCK(kHz) = SAI_CK_x/(SAIClockDivider*2*256) */ -#define SAIClockDivider(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 12 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 2 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 6 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 1 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 3 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 0 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 2 : 1 \ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Private_Variables STM32469I Discovery AUDIO Private Variables - * @{ - */ - -/* -Note: - these global variables are not compliant to naming rules (upper case without "_" ), - but we keep this naming for compatibility, in fact these variables (not static) - could have been used by the application, example the stm32f4xx_it.c: - void DMA2_Stream6_IRQHandler(void) - { HAL_DMA_IRQHandler(haudio_out_sai.hdmatx); } -*/ -AUDIO_DrvTypeDef *audio_drv; -SAI_HandleTypeDef haudio_out_sai; -I2S_HandleTypeDef haudio_in_i2s; -TIM_HandleTypeDef haudio_tim; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -uint8_t Channel_Demux[128] = { - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f -}; - -uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Private_Function_Prototypes STM32469I Discovery AUDIO Private Prototypes - * @{ - */ -static uint8_t SAIx_Init(uint32_t AudioFreq); -static void SAIx_DeInit(void); -static void I2Sx_Init(uint32_t AudioFreq); -static void I2Sx_DeInit(void); -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim); -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim); -static void TIMx_Init(void); -static void TIMx_DeInit(void); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); - -void BSP_AUDIO_OUT_ChangeAudioConfig(uint32_t AudioOutOption); - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_out_Private_Functions STM32469I Discovery AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The SAI PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, - uint8_t Volume, - uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_OK; - - SAIx_DeInit(); - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* SAI data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to SAI peripheral */ - haudio_out_sai.Instance = AUDIO_SAIx; - if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET) - { - /* Init the SAI MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL); - } - - if (SAIx_Init(AudioFreq) != AUDIO_OK) - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Retrieve audio codec identifier */ - if (cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS) == CS43L22_ID) - { - /* Initialize the audio driver structure */ - audio_drv = &cs43l22_drv; - } - else - { - ret = AUDIO_ERROR; - } - } - - if(ret == AUDIO_OK) - { - /* Initialize the audio codec internal registers */ - if (audio_drv->Init(AUDIO_I2C_ADDRESS, - OutputDevice, - Volume, - AudioFreq) != AUDIO_OK) - { - ret = AUDIO_ERROR; - } - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - uint8_t ret = AUDIO_OK; - - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - ret = AUDIO_ERROR; - } - - /* Initiate a DMA transfer of PCM samples towards the serial audio interface */ - if(ret == AUDIO_OK) - { - if (HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pBuffer, DMA_MAX(Size / AUDIODATA_SIZE))!= HAL_OK) - { - ret = AUDIO_ERROR; - } - } - - return ret; -} - -/** - * @brief Sends n-Bytes on the SAI interface. - * @param pData: pointer on PCM samples buffer - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * @warning When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - uint8_t ret = AUDIO_OK; - - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - ret = AUDIO_ERROR; - } - - /* Pause DMA transfer of PCM samples towards the serial audio interface */ - if(ret == AUDIO_OK) - { - if (HAL_SAI_DMAPause(&haudio_out_sai)!= HAL_OK) - { - ret = AUDIO_ERROR; - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief This function Resumes the audio file stream. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume - * (use of BSP_AUDIO_OUT_Play() function for resume could lead to - * unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - uint8_t ret = AUDIO_OK; - - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - ret = AUDIO_ERROR; - } - - /* Resume DMA transfer of PCM samples towards the serial audio interface */ - if(ret == AUDIO_OK) - { - if (HAL_SAI_DMAResume(&haudio_out_sai)!= HAL_OK) - { - ret = AUDIO_ERROR; - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - uint8_t ret = AUDIO_OK; - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(2); - } - - /* Stop DMA transfer of PCM samples towards the serial audio interface */ - if (HAL_SAI_DMAStop(&haudio_out_sai)!= HAL_OK) - { - ret = AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - uint8_t ret = AUDIO_OK; - - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - ret = AUDIO_ERROR; - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - uint8_t ret = AUDIO_OK; - - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - ret = AUDIO_ERROR; - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief Switch dynamically (while audio file is being played) the output - * target (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - uint8_t ret = AUDIO_OK; - - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - ret = AUDIO_ERROR; - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frequency configuration */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Changes the Audio Out Configuration. - * @param AudioOutOption: specifies the audio out new configuration - * This parameter can be any value of @ref BSP_Audio_Out_Option - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio out configuration. - */ -void BSP_AUDIO_OUT_ChangeAudioConfig(uint32_t AudioOutOption) -{ - /********** Playback Buffer circular/normal mode **********/ - if(AudioOutOption & BSP_AUDIO_OUT_CIRCULARMODE) - { - /* Deinitialize the Stream to update DMA mode */ - HAL_DMA_DeInit(haudio_out_sai.hdmatx); - - /* Update the SAI audio Transfer DMA mode */ - haudio_out_sai.hdmatx->Init.Mode = DMA_CIRCULAR; - - /* Configure the DMA Stream with new Transfer DMA mode */ - HAL_DMA_Init(haudio_out_sai.hdmatx); - } - else /* BSP_AUDIO_OUT_NORMALMODE */ - { - /* Deinitialize the Stream to update DMA mode */ - HAL_DMA_DeInit(haudio_out_sai.hdmatx); - - /* Update the SAI audio Transfer DMA mode */ - haudio_out_sai.hdmatx->Init.Mode = DMA_NORMAL; - - /* Configure the DMA Stream with new Transfer DMA mode */ - HAL_DMA_Init(haudio_out_sai.hdmatx); - } - - /********** Playback Buffer stereo/mono mode **********/ - if(AudioOutOption & BSP_AUDIO_OUT_STEREOMODE) - { - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.Init.MonoStereoMode = SAI_STEREOMODE; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); - } - else /* BSP_AUDIO_OUT_MONOMODE */ - { - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.Init.MonoStereoMode = SAI_MONOMODE; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); - } -} - -/** - * @brief Updates the Audio frame slot configuration. - * @param AudioFrameSlot: specifies the audio Frame slot - * This parameter can be any value of @ref CODEC_AudioFrame_SLOT_TDMMode - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frame slot. - */ -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot) -{ - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.SlotInit.SlotActive = AudioFrameSlot; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinit the audio peripherals. - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - SAIx_DeInit(); - /* DeInit the SAI MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_OUT_MspDeInit(&haudio_out_sai, NULL); - - /* Reset the audio output context */ - memset(&audio_drv, 0, sizeof(audio_drv)); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_discovery_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief SAI error callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) -{ - static DMA_HandleTypeDef hdma_sai_tx; - GPIO_InitTypeDef gpio_init_structure; - - /* Put CS43L2 codec reset high -----------------------------------*/ - AUDIO_RESET_ENABLE(); - gpio_init_structure.Pin = AUDIO_RESET_PIN; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - HAL_GPIO_Init(AUDIO_RESET_GPIO_PORT, &gpio_init_structure); - HAL_GPIO_WritePin(AUDIO_RESET_GPIO_PORT, AUDIO_RESET_PIN, GPIO_PIN_SET); - - /* Enable SAI clock */ - AUDIO_SAIx_CLK_ENABLE(); - - /* Enable GPIO clock */ - AUDIO_SAIx_MCLK_ENABLE(); - AUDIO_SAIx_SCK_SD_FS_ENABLE(); - - /* CODEC_SAI pins configuration: MCK pin -----------------------------------*/ - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SCK_SD_FS_AF; - HAL_GPIO_Init(AUDIO_SAIx_MCLK_GPIO_PORT, &gpio_init_structure); - - /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SCK_SD_FS_AF; - HAL_GPIO_Init(AUDIO_SAIx_SCK_SD_FS_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_SAIx_DMAx_CLK_ENABLE(); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Configure the hdma_saiTx handle parameters */ - hdma_sai_tx.Init.Channel = AUDIO_SAIx_DMAx_CHANNEL; - hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE; - hdma_sai_tx.Init.MemDataAlignment = AUDIO_SAIx_DMAx_MEM_DATA_SIZE; - hdma_sai_tx.Init.Mode = DMA_CIRCULAR; - hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_sai_tx.Instance = AUDIO_SAIx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_sai_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_sai_tx); - } - - /* SAI DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_SAIx_DMAx_IRQ); - -} -/** - * @brief Deinitializes BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* SAI DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_SAIx_DMAx_IRQ); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hsai->hdmatx); - } - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(hsai); - - /* Put CS43L2 codec reset low -----------------------------------*/ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO_PORT, AUDIO_RESET_PIN, GPIO_PIN_RESET); - - /* Deactives CODEC_SAI pins FS, SCK, MCK and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_MCLK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_SCK_SD_FS_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_RESET_PIN; - HAL_GPIO_DeInit(AUDIO_RESET_GPIO_PORT, gpio_init_structure.Pin); - - - /* Disable SAI clock */ - AUDIO_SAIx_CLK_DISABLE(); - - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hsai: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - /* PLLI2S_VCO: VCO_429M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 429/2 = 214.5 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVQ = 214.5/19 = 11.289 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 429; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 2; - rcc_ex_clk_init_struct.PLLI2SDivQ = 19; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */ - { - /* SAI clock config - PLLSAI_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 344/7 = 49.142 Mhz - I2S_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 7; - rcc_ex_clk_init_struct.PLLI2SDivQ = 1; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ -/** - * @brief Initializes the Audio Codec audio interface (SAI). - * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. - * @note The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 - * and user can update this configuration using - */ -static uint8_t SAIx_Init(uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_OK; - - /* Initialize the haudio_out_sai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Configure SAI_Block_x - LSBFirst: Disabled - DataSize: 16 */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - haudio_out_sai.Init.ClockSource = SAI_CLKSOURCE_PLLI2S; - haudio_out_sai.Init.AudioMode = SAI_MODEMASTER_TX; - haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE; - haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL; - haudio_out_sai.Init.DataSize = SAI_DATASIZE_16; - haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB; - haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; - haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS; - haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLE; - haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF; -/* - haudio_out_sai.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_MCKDIV; - haudio_out_sai.Init.SynchroExt = SAI_SYNCEXT_DISABLE; - haudio_out_sai.Init.Mckdiv = SAIClockDivider(AudioFreq); - haudio_out_sai.Init.MonoStereoMode = SAI_STEREOMODE; - haudio_out_sai.Init.CompandingMode = SAI_NOCOMPANDING; - haudio_out_sai.Init.TriState = SAI_OUTPUT_NOTRELEASED; -*/ - - /* Configure SAI_Block_x Frame - Frame Length: 64 - Frame active Length: 32 - FS Definition: Start frame + Channel Side identification - FS Polarity: FS active Low - FS Offset: FS asserted one bit before the first bit of slot 0 */ - haudio_out_sai.FrameInit.FrameLength = 64; - haudio_out_sai.FrameInit.ActiveFrameLength = 32; - haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; - haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; - haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; - - /* Configure SAI Block_x Slot - Slot First Bit Offset: 0 - Slot Size : 16 - Slot Number: 4 - Slot Active: All slot actives */ - haudio_out_sai.SlotInit.FirstBitOffset = 0; - haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE; - haudio_out_sai.SlotInit.SlotNumber = 4; - haudio_out_sai.SlotInit.SlotActive = CODEC_AUDIOFRAME_SLOT_0123; - - /* Initializes the SAI peripheral*/ - if (HAL_SAI_Init(&haudio_out_sai) != HAL_OK) - { - ret = AUDIO_ERROR; - } - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); - - return ret; - -} - -/** - * @brief Deinitializes the Audio Codec audio interface (SAI). - */ -static void SAIx_DeInit(void) -{ - /* Initialize the hAudioOutSai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - HAL_SAI_DeInit(&haudio_out_sai); -} - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_in_Private_Functions STM32469I Discovery AUDIO IN Private functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - /* DeInit the I2S */ - I2Sx_DeInit(); - - /* Configure PLL clock */ - BSP_AUDIO_IN_ClockConfig(&haudio_in_i2s, NULL); - - /* Configure the PDM library */ - PDMDecoder_Init(AudioFreq, ChnlNbr, ChnlNbr); - - /* Configure the I2S peripheral */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - if(HAL_I2S_GetState(&haudio_in_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&haudio_in_i2s, NULL); - } - - I2Sx_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&haudio_in_i2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* TIMx Peripheral clock disable */ - AUDIO_TIMx_CLK_DISABLE(); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Deinit the audio IN peripherals. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - I2Sx_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_IN_MspDeInit(&haudio_in_i2s, NULL); - TIMx_DeInit(); -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf) -{ - uint8_t app_pdm[INTERNAL_BUFF_SIZE*2]; - uint8_t byte1 = 0, byte2 = 0; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; index> 8)& 0xFF; - byte1 = (PDMBuf[index] & 0xFF); - app_pdm[(index*2)+1] = Channel_Demux[byte1 & CHANNEL_DEMUX_MASK] | Channel_Demux[byte2 & CHANNEL_DEMUX_MASK] << 4; - app_pdm[(index*2)] = Channel_Demux[(byte1 >> 1) & CHANNEL_DEMUX_MASK] | Channel_Demux[(byte2 >> 1) & CHANNEL_DEMUX_MASK] << 4; - } - - for(index = 0; index < DEFAULT_AUDIO_IN_CHANNEL_NBR; index++) - { - /* PDM to PCM filter */ - PDM_Filter((uint8_t*)&app_pdm[index], (uint16_t*)&(PCMBuf[index]), &PDM_FilterHandler[index]); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - - /** - * @brief Rx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Rx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_discovery_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32469i_discovery_audio.h) */ - BSP_AUDIO_IN_Error_Callback(); -} - -/** - * @brief Clock Config. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_IN_Init() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params) -{ - RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct; - - HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct); - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 384; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = 2; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/** - * @brief BSP AUDIO IN MSP Init. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2s_rx; - GPIO_InitTypeDef gpio_init_structure; - - /* Configure the Timer which clocks the MEMS */ - /* Moved inside MSP to allow applic to redefine the TIMx_MspInit */ - TIMx_Init(); - - /* Enable I2S clock */ - AUDIO_I2Sx_CLK_ENABLE(); - - /* Enable SCK and SD GPIO clock */ - AUDIO_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE(); - /* CODEC_I2S pins configuration: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - gpio_init_structure.Alternate = AUDIO_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable PD12 (I2S3_CLK) connected to PB3 via jamper JP4 */ - /* on Eval this was provided by PC6 (initialized in TIMx section) */ -/* - gpio_init_structure.Pin = GPIO_PIN_12; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_I2Sx_SCK_AF; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); */ - - - /* Enable the DMA clock */ - AUDIO_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Configure the hdma_i2sRx handle parameters */ - hdma_i2s_rx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL; - hdma_i2s_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_rx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_rx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_rx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_rx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_rx.Instance = AUDIO_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2s_rx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_rx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through dedicated PLLI2S_R) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_in_i2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* I2S2 peripheral configuration */ - haudio_in_i2s.Init.AudioFreq = 4 * AudioFreq; - haudio_in_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_in_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - haudio_in_i2s.Init.Mode = I2S_MODE_MASTER_RX; - haudio_in_i2s.Init.Standard = I2S_STANDARD_LSB; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_in_i2s); - - /* Disable I2S block */ - __HAL_I2S_ENABLE(&haudio_in_i2s); - -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2s); -} - - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable peripherals and GPIO Clocks --------------------------------------*/ - /* TIMx Peripheral clock enable */ - AUDIO_TIMx_CLK_ENABLE(); - - /* Enable GPIO Channels Clock */ - AUDIO_TIMx_GPIO_CLK_ENABLE(); - - /* Configure I/Os ----------------------------------------------------------*/ - /* Common configuration for all channels */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_TIMx_AF; - - /* Configure TIM input channel */ - gpio_init_structure.Pin = AUDIO_TIMx_IN_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); - - /* Configure TIM output channel */ - gpio_init_structure.Pin = AUDIO_TIMx_OUT_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Disable TIMx Peripheral clock */ - AUDIO_TIMx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_Init(void) -{ - TIM_IC_InitTypeDef s_ic_config; - TIM_OC_InitTypeDef s_oc_config; - TIM_ClockConfigTypeDef s_clk_source_config; - TIM_SlaveConfigTypeDef s_slave_config; - - /* Configure the TIM peripheral --------------------------------------------*/ - /* Set TIMx instance */ - haudio_tim.Instance = AUDIO_TIMx; - /* Timer Input Capture Configuration Structure declaration */ - /* Initialize TIMx peripheral as follow: - + Period = 0xFFFF - + Prescaler = 0 - + ClockDivision = 0 - + Counter direction = Up - */ - haudio_tim.Init.Period = 1; - haudio_tim.Init.Prescaler = 0; - haudio_tim.Init.ClockDivision = 0; - haudio_tim.Init.CounterMode = TIM_COUNTERMODE_UP; - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspInit(&haudio_tim); - HAL_TIM_IC_Init(&haudio_tim); - - /* Configure the Input Capture channel -------------------------------------*/ - /* Configure the Input Capture of channel 2 */ - s_ic_config.ICPolarity = TIM_ICPOLARITY_FALLING; - s_ic_config.ICSelection = TIM_ICSELECTION_DIRECTTI; - s_ic_config.ICPrescaler = TIM_ICPSC_DIV1; - s_ic_config.ICFilter = 0; - HAL_TIM_IC_ConfigChannel(&haudio_tim, &s_ic_config, AUDIO_TIMx_IN_CHANNEL); - - /* Select external clock mode 1 */ - s_clk_source_config.ClockSource = TIM_CLOCKSOURCE_ETRMODE1; - s_clk_source_config.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED; - s_clk_source_config.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_clk_source_config.ClockFilter = 0; - HAL_TIM_ConfigClockSource(&haudio_tim, &s_clk_source_config); - - /* Select Input Channel as input trigger */ - s_slave_config.InputTrigger = TIM_TS_TI1FP1; - s_slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; - s_slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED; - s_slave_config.TriggerPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_slave_config.TriggerFilter = 0; - HAL_TIM_SlaveConfigSynchronization(&haudio_tim, &s_slave_config); - - /* Output Compare PWM Mode configuration: Channel2 */ - s_oc_config.OCMode = TIM_OCMODE_PWM1; - s_oc_config.OCIdleState = TIM_OCIDLESTATE_SET; - s_oc_config.Pulse = 1; - s_oc_config.OCPolarity = TIM_OCPOLARITY_HIGH; - s_oc_config.OCNPolarity = TIM_OCNPOLARITY_HIGH; - s_oc_config.OCFastMode = TIM_OCFAST_DISABLE; - s_oc_config.OCNIdleState = TIM_OCNIDLESTATE_SET; - - /* Initialize the TIM3 Channel2 with the structure above */ - HAL_TIM_PWM_ConfigChannel(&haudio_tim, &s_oc_config, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel2 */ - HAL_TIM_PWM_Start(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel1 */ - HAL_TIM_IC_Start(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_DeInit(void) -{ - haudio_tim.Instance = AUDIO_TIMx; - - /* Stop the TIM3 Channel2 */ - HAL_TIM_PWM_Stop(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - /* Stop the TIM3 Channel1 */ - HAL_TIM_IC_Stop(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); - - HAL_TIM_IC_DeInit(&haudio_tim); - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspDeInit(&haudio_tim); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.h deleted file mode 100644 index f2ef2701f5..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_audio.h +++ /dev/null @@ -1,328 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_audio.h - * @author MCD Application Team - * @version V2.0.0 - * @date 27-January-2017 - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_AUDIO_H -#define __STM32469I_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#if defined(BSP_AUDIO_USE_RTOS) -#include "k_mem.h" -#else -#include -#endif - -/* Include audio component Driver */ -#include "../Components/cs43l22/cs43l22.h" -#include "stm32469i_discovery.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_AUDIO - * @{ - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Exported_Types STM32469I Discovery AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Exported_Constants STM32469I Discovery AUDIO Exported Constants - * @{ - */ - -/** @defgroup BSP_Audio_Out_Option BSP AUDIO OUT Option - * @{ - */ -#define BSP_AUDIO_OUT_CIRCULARMODE ((uint32_t)0x00000001) /* BUFFER CIRCULAR MODE */ -#define BSP_AUDIO_OUT_NORMALMODE ((uint32_t)0x00000002) /* BUFFER NORMAL MODE */ -#define BSP_AUDIO_OUT_STEREOMODE ((uint32_t)0x00000004) /* STEREO MODE */ -#define BSP_AUDIO_OUT_MONOMODE ((uint32_t)0x00000008) /* MONO MODE */ -/** - * @} - */ - -/*------------------------------------------------------------------------------ - USER SAI defines parameters - -----------------------------------------------------------------------------*/ -/** @defgroup CODEC_AudioFrame_SLOT_TDMMode STM32469I Discovery Audio Slot TDM mode - * @brief In W8994 codec the Audio frame contains 4 slots : TDM Mode - * TDM format : - * +------------------|------------------|--------------------|-------------------+ - * | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right | - * +------------------------------------------------------------------------------+ - * @{ - */ -/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */ -#define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3 -/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2 -/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3 -/** - * @} - */ - -/* SAI peripheral configuration defines */ -#define AUDIO_SAIx SAI1_Block_A -#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE() -#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE() -#define AUDIO_SAIx_MCLK_SCK_SD_FS_AF GPIO_AF6_SAI1 - -#define AUDIO_SAIx_MCLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define AUDIO_SAIx_MCLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define AUDIO_SAIx_MCK_PIN GPIO_PIN_7 -#define AUDIO_SAIx_MCLK_GPIO_PORT GPIOG - -#define AUDIO_SAIx_SCK_SD_FS_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define AUDIO_SAIx_SCK_SD_FS_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() -#define AUDIO_SAIx_FS_PIN GPIO_PIN_4 -#define AUDIO_SAIx_SCK_PIN GPIO_PIN_5 -#define AUDIO_SAIx_SD_PIN GPIO_PIN_6 -#define AUDIO_SAIx_SCK_SD_FS_GPIO_PORT GPIOE - -#define AUDIO_RESET_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define AUDIO_RESET_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() -#define AUDIO_RESET_PIN GPIO_PIN_2 -#define AUDIO_RESET_GPIO_PORT GPIOE - -/* SAI DMA Stream definitions */ -#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_SAIx_DMAx_CLK_DISABLE() __HAL_RCC_DMA2_CLK_DISABLE() -#define AUDIO_SAIx_DMAx_STREAM DMA2_Stream3 -#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream3_IRQn -#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream3_IRQHandler - -/* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 5 /* Select the preemption priority level(0 is the highest) */ - -/* Disable SAIx PLL */ -#define AUDIO_SAIx_PLL_DISABLE() HAL_RCCEx_DisablePLLSAI1() -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_I2Sx SPI3 -#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_3 -#define AUDIO_I2Sx_SCK_GPIO_PORT GPIOB -#define AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_AF GPIO_AF6_SPI3 - -#define AUDIO_I2Sx_SD_PIN GPIO_PIN_6 -#define AUDIO_I2Sx_SD_GPIO_PORT GPIOD -#define AUDIO_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define AUDIO_I2Sx_SD_AF GPIO_AF5_I2S3ext - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream2 -#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream2_IRQn -#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream2_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO ((uint32_t)6) /* Select the preemption priority level(0 is the highest) */ - - -/* Two channels are used: - - one channel as input which is connected to I2S SCK in stereo mode - - one channel as output which divides the frequency on the input -*/ - -#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM4_CLK_ENABLE() -#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM4_CLK_DISABLE() -#define AUDIO_TIMx TIM4 -#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 -#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ -#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_TIMx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define AUDIO_TIMx_GPIO_PORT GPIOD -#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_12 -#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_13 -#define AUDIO_TIMx_AF GPIO_AF2_TIM4 - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK ((uint8_t)0) -#define AUDIO_ERROR ((uint8_t)1) -#define AUDIO_TIMEOUT ((uint8_t)2) - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE (128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR) -/* PCM buffer output size */ -#define PCM_OUT_SIZE (DEFAULT_AUDIO_IN_FREQ/1000*DEFAULT_AUDIO_IN_CHANNEL_NBR) -#define CHANNEL_DEMUX_MASK ((uint8_t)0x55) - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/* Delay for the Codec to be correctly reset */ -#define CODEC_RESET_DELAY ((uint8_t)5) - -/*------------------------------------------------------------------------------ - OUTPUT DEVICES definition -------------------------------------------------------------------------------*/ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Exported_Variables STM32469I-Discovery AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_Exported_Macros STM32469I-Discovery AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_OUT_Exported_Functions STM32469I Discovery AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); -void BSP_AUDIO_OUT_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params); -void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params); - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_AUDIO_IN_Exported_Functions STM32469I Discovery AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -void BSP_AUDIO_IN_DeInit(void); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.c deleted file mode 100644 index 621e94c6f4..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.c +++ /dev/null @@ -1,453 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24LR64 - * EEPROM memory. - * To be able to use this driver, the switch EE_M24LR64 must be defined - * in your toolchain compiler preprocessor - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24LR64) is available on separate daughter - * board ANT7-M24LR-A, which is not provided with the STM32469I-Discovery - * board. - * To use this driver you have to connect the ANT7-M24LR-A to CN11 - * connector of STM32469I-Discovery board. - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm32469i_discovery.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm32469i_discovery.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and BSP_EEPROM_WritePage()) use DMA mode to perform the data - * transfer to/from EEPROM memory. - * - * @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform - * small write (less than 1 page) BUT The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24LR64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0(GND) | 1 (0V) | - * | . | AC0 | 2 | - * | . | AC1 | 3 | - * | . | VSS | 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | . | E1(GND) | 7 (0V) | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_EEPROM STM32469I Discovery EEPROM - * @brief This file includes the I2C EEPROM driver of STM32469I-Discovery board. - * @{ - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Types STM32469I Discovery EEPROM Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Defines STM32469I Discovery EEPROM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Macros STM32469I Discovery EEPROM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Variables STM32469I Discovery EEPROM Private Variables - * @{ - */ -__IO uint16_t EEPROMAddress = 0; -__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Function_Prototypes STM32469I Discovery EEPROM Private Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Private_Functions STM32469I Discovery EEPROM Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * - * @note There are 2 different versions of M24LR64 (A01 & A02). - * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) - * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address for A01 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A01; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* Select the EEPROM address for A02 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A02; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - } - return EEPROM_OK; -} - -/** - * @brief DeInitializes the EEPROM. - * @retval EEPROM state - */ -uint8_t BSP_EEPROM_DeInit(void) -{ - /* I2C won't be disabled because common to other functionalities */ - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage== 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.h deleted file mode 100644 index c3af82f243..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_eeprom.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32469i_discovery_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F469I_DISCOVERY_EEPROM_H -#define __STM32F469I_DISCOVERY_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_EEPROM - * @brief This file includes the I2C EEPROM driver of STM32469I-Discovery board. - * @{ - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Exported_Types STM32469I Discovery EEPROM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Exported_Constants STM32469I Discovery EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE ((uint8_t)4) -#define EEPROM_MAX_SIZE ((uint16_t)0x2000) /* 64Kbit */ - -/* Maximum Timeout values for flags and events waiting loops. -This timeout is based on systick set to 1ms*/ -/* Timeout for read based if read all the EEPROM : EEPROM_MAX_SIZE * I2C_SPEED (640ms) */ -#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) -/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * I2C_SPEED (320us) */ -#define EEPROM_WRITE_TIMEOUT ((uint32_t)(10)) - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS 3000 - -#define EEPROM_OK 0 -#define EEPROM_FAIL 1 -#define EEPROM_TIMEOUT 2 -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Exported_Macros STM32469I Discovery EEPROM Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_EEPROM_Exported_Functions STM32469I Discovery EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint8_t BSP_EEPROM_DeInit(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occur during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F469I_DISCOVERY_EEPROM_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.c deleted file mode 100644 index 4cb9aa88e0..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.c +++ /dev/null @@ -1,1649 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM32469I-Discovery evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive directly in video mode a LCD TFT using the DSI interface. - The following IPs are implied : DSI Host IP block working - in conjunction to the LTDC controller. - - This driver is linked by construction to LCD KoD mounted on board MB1166. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. - o Enable the LCD display using the BSP_LCD_DisplayOn() function. - - + Options - o Configure and enable the color keying functionality using the - BSP_LCD_SetColorKeying() function. - o Modify in the fly the transparency and/or the frame buffer address - using the following functions: - - BSP_LCD_SetTransparency() - - BSP_LCD_SetLayerAddress() - - + Display on LCD - o Clear the whole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_LCD STM32469I Discovery LCD - * @{ - */ - -/** @defgroup STM32469I-Discovery_LCD_Private_TypesDefinitions STM32469I Discovery LCD Private TypesDefinitions - * @{ - */ -static DSI_VidCfgTypeDef hdsivideo_handle; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Private_Defines STM32469I Discovery LCD Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Private_Macros STM32469I Discovery LCD Private Macros - * @{ - */ -#define ABS(X) ((X) > 0 ? (X) : -(X)) - -#define POLY_X(Z) ((int32_t)((Points + (Z))->X)) -#define POLY_Y(Z) ((int32_t)((Points + (Z))->Y)) -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Variables STM32469I Discovery LCD Exported Variables - * @{ - */ - -/** - * @} - */ - - -/** @defgroup STM32469I-Discovery_LCD_Private_Variables STM32469I Discovery LCD Private Variables - * @{ - */ - -DMA2D_HandleTypeDef hdma2d_eval; -LTDC_HandleTypeDef hltdc_eval; -DSI_HandleTypeDef hdsi_eval; -uint32_t lcd_x_size = OTM8009A_800X480_WIDTH; -uint32_t lcd_y_size = OTM8009A_800X480_HEIGHT; - -/** - * @} - */ - - -/** @defgroup STM32469I-Discovery_LCD_Private_Variables STM32469I Discovery LCD Private Variables - * @{ - */ - -/** - * @brief Default Active LTDC Layer in which drawing is made is LTDC Layer Background - */ -static uint32_t ActiveLayer = LTDC_ACTIVE_LAYER_BACKGROUND; - -/** - * @brief Current Drawing Layer properties variable - */ -static LCD_DrawPropTypeDef DrawProp[LTDC_MAX_LAYER_NUMBER]; -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Private_FunctionPrototypes STM32469I Discovery LCD Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex); -static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode); -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Functions STM32469I Discovery LCD Exported Functions - * @{ - */ - -/** - * @brief Initializes the DSI LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - return (BSP_LCD_InitEx(LCD_ORIENTATION_LANDSCAPE)); -} - -/** - * @brief Initializes the DSI LCD. - * The ititialization is done as below: - * - DSI PLL ititialization - * - DSI ititialization - * - LTDC ititialization - * - OTM8009A LCD Display IC Driver ititialization - * @retval LCD state - */ -uint8_t BSP_LCD_InitEx(LCD_OrientationTypeDef orientation) -{ - DSI_PLLInitTypeDef dsiPllInit; - DSI_PHY_TimerTypeDef PhyTimings; - static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; - uint32_t LcdClock = 27429; /*!< LcdClk = 27429 kHz */ - - uint32_t laneByteClk_kHz = 0; - uint32_t VSA; /*!< Vertical start active time in units of lines */ - uint32_t VBP; /*!< Vertical Back Porch time in units of lines */ - uint32_t VFP; /*!< Vertical Front Porch time in units of lines */ - uint32_t VACT; /*!< Vertical Active time in units of lines = imageSize Y in pixels to display */ - uint32_t HSA; /*!< Horizontal start active time in units of lcdClk */ - uint32_t HBP; /*!< Horizontal Back Porch time in units of lcdClk */ - uint32_t HFP; /*!< Horizontal Front Porch time in units of lcdClk */ - uint32_t HACT; /*!< Horizontal Active time in units of lcdClk = imageSize X in pixels to display */ - - - /* Toggle Hardware Reset of the DSI LCD using - * its XRES signal (active low) */ - BSP_LCD_Reset(); - - /* Call first MSP Initialize only in case of first initialization - * This will set IP blocks LTDC, DSI and DMA2D - * - out of reset - * - clocked - * - NVIC IRQ related to IP blocks enabled - */ - BSP_LCD_MspInit(); - -/*************************DSI Initialization***********************************/ - - /* Base address of DSI Host/Wrapper registers to be set before calling De-Init */ - hdsi_eval.Instance = DSI; - - HAL_DSI_DeInit(&(hdsi_eval)); - -#if !defined(USE_STM32469I_DISCO_REVA) - dsiPllInit.PLLNDIV = 125; - dsiPllInit.PLLIDF = DSI_PLL_IN_DIV2; - dsiPllInit.PLLODF = DSI_PLL_OUT_DIV1; -#else - dsiPllInit.PLLNDIV = 100; - dsiPllInit.PLLIDF = DSI_PLL_IN_DIV5; - dsiPllInit.PLLODF = DSI_PLL_OUT_DIV1; -#endif - laneByteClk_kHz = 62500; /* 500 MHz / 8 = 62.5 MHz = 62500 kHz */ - - /* Set number of Lanes */ - hdsi_eval.Init.NumberOfLanes = DSI_TWO_DATA_LANES; - - /* TXEscapeCkdiv = f(LaneByteClk)/15.62 = 4 */ - hdsi_eval.Init.TXEscapeCkdiv = laneByteClk_kHz/15620; - - HAL_DSI_Init(&(hdsi_eval), &(dsiPllInit)); - - /* Timing parameters for all Video modes - * Set Timing parameters of LTDC depending on its chosen orientation - */ - if(orientation == LCD_ORIENTATION_PORTRAIT) - { - lcd_x_size = OTM8009A_480X800_WIDTH; /* 480 */ - lcd_y_size = OTM8009A_480X800_HEIGHT; /* 800 */ - } - else - { - /* lcd_orientation == LCD_ORIENTATION_LANDSCAPE */ - lcd_x_size = OTM8009A_800X480_WIDTH; /* 800 */ - lcd_y_size = OTM8009A_800X480_HEIGHT; /* 480 */ - } - - HACT = lcd_x_size; - VACT = lcd_y_size; - - /* The following values are same for portrait and landscape orientations */ -#if defined (USE_STM32469I_DISCO_REVC) - VSA = NT35510_480X800_VSYNC; - VBP = NT35510_480X800_VBP; - VFP = NT35510_480X800_VFP; - HSA = NT35510_480X800_HSYNC; - HBP = NT35510_480X800_HBP; - HFP = NT35510_480X800_HFP; -#else - VSA = OTM8009A_480X800_VSYNC; - VBP = OTM8009A_480X800_VBP; - VFP = OTM8009A_480X800_VFP; - HSA = OTM8009A_480X800_HSYNC; - HBP = OTM8009A_480X800_HBP; - HFP = OTM8009A_480X800_HFP; -#endif /* USE_STM32469I_DISCO_REVC */ - - - hdsivideo_handle.VirtualChannelID = LCD_OTM8009A_ID; - hdsivideo_handle.ColorCoding = LCD_DSI_PIXEL_DATA_FMT_RBG888; - hdsivideo_handle.VSPolarity = DSI_VSYNC_ACTIVE_HIGH; - hdsivideo_handle.HSPolarity = DSI_HSYNC_ACTIVE_HIGH; - hdsivideo_handle.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH; - hdsivideo_handle.Mode = DSI_VID_MODE_BURST; /* Mode Video burst ie : one LgP per line */ - hdsivideo_handle.NullPacketSize = 0xFFF; - hdsivideo_handle.NumberOfChunks = 0; - hdsivideo_handle.PacketSize = HACT; /* Value depending on display orientation choice portrait/landscape */ - hdsivideo_handle.HorizontalSyncActive = (HSA * laneByteClk_kHz) / LcdClock; - hdsivideo_handle.HorizontalBackPorch = (HBP * laneByteClk_kHz) / LcdClock; - hdsivideo_handle.HorizontalLine = ((HACT + HSA + HBP + HFP) * laneByteClk_kHz) / LcdClock; /* Value depending on display orientation choice portrait/landscape */ - hdsivideo_handle.VerticalSyncActive = VSA; - hdsivideo_handle.VerticalBackPorch = VBP; - hdsivideo_handle.VerticalFrontPorch = VFP; - hdsivideo_handle.VerticalActive = VACT; /* Value depending on display orientation choice portrait/landscape */ - - /* Enable or disable sending LP command while streaming is active in video mode */ - hdsivideo_handle.LPCommandEnable = DSI_LP_COMMAND_ENABLE; /* Enable sending commands in mode LP (Low Power) */ - - /* Largest packet size possible to transmit in LP mode in VSA, VBP, VFP regions */ - /* Only useful when sending LP packets is allowed while streaming is active in video mode */ - hdsivideo_handle.LPLargestPacketSize = 16; - - /* Largest packet size possible to transmit in LP mode in HFP region during VACT period */ - /* Only useful when sending LP packets is allowed while streaming is active in video mode */ - hdsivideo_handle.LPVACTLargestPacketSize = 0; - - - /* Specify for each region of the video frame, if the transmission of command in LP mode is allowed in this region */ - /* while streaming is active in video mode */ - hdsivideo_handle.LPHorizontalFrontPorchEnable = DSI_LP_HFP_ENABLE; /* Allow sending LP commands during HFP period */ - hdsivideo_handle.LPHorizontalBackPorchEnable = DSI_LP_HBP_ENABLE; /* Allow sending LP commands during HBP period */ - hdsivideo_handle.LPVerticalActiveEnable = DSI_LP_VACT_ENABLE; /* Allow sending LP commands during VACT period */ - hdsivideo_handle.LPVerticalFrontPorchEnable = DSI_LP_VFP_ENABLE; /* Allow sending LP commands during VFP period */ - hdsivideo_handle.LPVerticalBackPorchEnable = DSI_LP_VBP_ENABLE; /* Allow sending LP commands during VBP period */ - hdsivideo_handle.LPVerticalSyncActiveEnable = DSI_LP_VSYNC_ENABLE; /* Allow sending LP commands during VSync = VSA period */ - - /* Configure DSI Video mode timings with settings set above */ - HAL_DSI_ConfigVideoMode(&(hdsi_eval), &(hdsivideo_handle)); - - /* Configure DSI PHY HS2LP and LP2HS timings */ - PhyTimings.ClockLaneHS2LPTime = 35; - PhyTimings.ClockLaneLP2HSTime = 35; - PhyTimings.DataLaneHS2LPTime = 35; - PhyTimings.DataLaneLP2HSTime = 35; - PhyTimings.DataLaneMaxReadTime = 0; - PhyTimings.StopWaitTime = 10; - HAL_DSI_ConfigPhyTimer(&hdsi_eval, &PhyTimings); - -/*************************End DSI Initialization*******************************/ - - -/************************LTDC Initialization***********************************/ - - /* Timing Configuration */ - hltdc_eval.Init.HorizontalSync = (HSA - 1); - hltdc_eval.Init.AccumulatedHBP = (HSA + HBP - 1); - hltdc_eval.Init.AccumulatedActiveW = (lcd_x_size + HSA + HBP - 1); - hltdc_eval.Init.TotalWidth = (lcd_x_size + HSA + HBP + HFP - 1); - - /* Initialize the LCD pixel width and pixel height */ - hltdc_eval.LayerCfg->ImageWidth = lcd_x_size; - hltdc_eval.LayerCfg->ImageHeight = lcd_y_size; - - - /* LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 384 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 384 MHz / 7 = 54.857 MHz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_2 = 54.857 MHz / 2 = 27.429 MHz */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - PeriphClkInitStruct.PLLSAI.PLLSAIN = 384; - PeriphClkInitStruct.PLLSAI.PLLSAIR = 7; - PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - - /* Background value */ - hltdc_eval.Init.Backcolor.Blue = 0; - hltdc_eval.Init.Backcolor.Green = 0; - hltdc_eval.Init.Backcolor.Red = 0; - hltdc_eval.Init.PCPolarity = LTDC_PCPOLARITY_IPC; - hltdc_eval.Instance = LTDC; - - /* Get LTDC Configuration from DSI Configuration */ - HAL_LTDCEx_StructInitFromVideoConfig(&(hltdc_eval), &(hdsivideo_handle)); - - /* Initialize the LTDC */ - HAL_LTDC_Init(&hltdc_eval); - - /* Enable the DSI host and wrapper after the LTDC initialization - To avoid any synchronization issue, the DSI shall be started after enabling the LTDC */ - HAL_DSI_Start(&(hdsi_eval)); - -#if !defined(DATA_IN_ExtSDRAM) - /* Initialize the SDRAM */ - BSP_SDRAM_Init(); -#endif /* DATA_IN_ExtSDRAM */ - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - -/************************End LTDC Initialization*******************************/ - -#if defined(USE_STM32469I_DISCO_REVC) -/***********************NT35510 Initialization********************************/ - - /* Initialize the NT35510 LCD Display IC Driver (TechShine LCD IC Driver) - * depending on configuration set in 'hdsivideo_handle'. - */ - NT35510_Init(NT35510_FORMAT_RGB888, orientation); -/***********************End NT35510 Initialization****************************/ -#else -/***********************OTM8009A Initialization********************************/ - - /* Initialize the OTM8009A LCD Display IC Driver (KoD LCD IC Driver) - * depending on configuration set in 'hdsivideo_handle'. - */ - OTM8009A_Init(OTM8009A_FORMAT_RGB888, orientation); -/***********************End OTM8009A Initialization****************************/ -#endif /* USE_STM32469I_DISCO_REVC */ - - return LCD_OK; -} - -/** - * @brief BSP LCD Reset - * Hw reset the LCD DSI activating its XRES signal (active low for some time) - * and desactivating it later. - * This signal is only cabled on Discovery Rev B and beyond. - */ -void BSP_LCD_Reset(void) -{ -#if !defined(USE_STM32469I_DISCO_REVA) - /* Disco Rev B and beyond : reset the LCD by activation of XRES (active low) connected to PH7 */ - GPIO_InitTypeDef gpio_init_structure; - - __HAL_RCC_GPIOH_CLK_ENABLE(); - - /* Configure the GPIO on PH7 */ - gpio_init_structure.Pin = GPIO_PIN_7; -#if defined(USE_STM32469I_DISCO_REVC) - /* Push Pull Mode is required for TechShine LCD (NT35510) */ - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; -#else - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_OD; -#endif - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - HAL_GPIO_Init(GPIOH, &gpio_init_structure); - - /* Activate XRES active low */ - HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7, GPIO_PIN_RESET); - - HAL_Delay(20); /* wait 20 ms */ - - /* Deactivate XRES */ - HAL_GPIO_WritePin(GPIOH, GPIO_PIN_7, GPIO_PIN_SET); - - /* Wait for 20ms after releasing XRES before sending commands */ - HAL_Delay(20); -#else - /* Nothing to do in case of Disco Rev A */ -#endif /* USE_STM32469I_DISCO_REVA == 0 */ -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return (lcd_x_size); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return (lcd_y_size); -} - -/** - * @brief Set the LCD X size. - * @param imageWidthPixels : uint32_t image width in pixels unit - */ -void BSP_LCD_SetXSize(uint32_t imageWidthPixels) -{ - hltdc_eval.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels; -} - -/** - * @brief Set the LCD Y size. - * @param imageHeightPixels : uint32_t image height in lines unit - */ -void BSP_LCD_SetYSize(uint32_t imageHeightPixels) -{ - hltdc_eval.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels; -} - - -/** - * @brief Initializes the LCD layers. - * @param LayerIndex: Layer foreground or background - * @param FB_Address: Layer frame buffer - */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) -{ - LCD_LayerCfgTypeDef Layercfg; - - /* Layer Init */ - Layercfg.WindowX0 = 0; - Layercfg.WindowX1 = BSP_LCD_GetXSize(); - Layercfg.WindowY0 = 0; - Layercfg.WindowY1 = BSP_LCD_GetYSize(); - Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; - Layercfg.FBStartAdress = FB_Address; - Layercfg.Alpha = 255; - Layercfg.Alpha0 = 0; - Layercfg.Backcolor.Blue = 0; - Layercfg.Backcolor.Green = 0; - Layercfg.Backcolor.Red = 0; - Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; - Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; - Layercfg.ImageWidth = BSP_LCD_GetXSize(); - Layercfg.ImageHeight = BSP_LCD_GetYSize(); - - HAL_LTDC_ConfigLayer(&hltdc_eval, &Layercfg, LayerIndex); - - DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE; - DrawProp[LayerIndex].pFont = &Font24; - DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; -} - - -/** - * @brief Selects the LCD Layer. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_SelectLayer(uint32_t LayerIndex) -{ - ActiveLayer = LayerIndex; -} - -/** - * @brief Sets an LCD Layer visible - * @param LayerIndex: Visible Layer - * @param State: New state of the specified layer - * This parameter can be one of the following values: - * @arg ENABLE - * @arg DISABLE - */ -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State) -{ - if(State == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&(hltdc_eval), LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&(hltdc_eval), LayerIndex); - } - __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&(hltdc_eval)); - -} - -/** - * @brief Configures the transparency. - * @param LayerIndex: Layer foreground or background. - * @param Transparency: Transparency - * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF - */ -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency) -{ - - HAL_LTDC_SetAlpha(&(hltdc_eval), Transparency, LayerIndex); - -} - -/** - * @brief Sets an LCD layer frame buffer address. - * @param LayerIndex: Layer foreground or background - * @param Address: New LCD frame buffer value - */ -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address) -{ - - HAL_LTDC_SetAddress(&(hltdc_eval), Address, LayerIndex); - -} - -/** - * @brief Sets display window. - * @param LayerIndex: Layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Reconfigure the layer size */ - HAL_LTDC_SetWindowSize(&(hltdc_eval), Width, Height, LayerIndex); - - /* Reconfigure the layer position */ - HAL_LTDC_SetWindowPosition(&(hltdc_eval), Xpos, Ypos, LayerIndex); - -} - -/** - * @brief Configures and sets the color keying. - * @param LayerIndex: Layer foreground or background - * @param RGBValue: Color reference - */ -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying(&(hltdc_eval), RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying(&(hltdc_eval), LayerIndex); -} - -/** - * @brief Disables the color keying. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying(&(hltdc_eval), LayerIndex); -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetTextColor(uint32_t Color) -{ - DrawProp[ActiveLayer].TextColor = Color; -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint32_t BSP_LCD_GetTextColor(void) -{ - return DrawProp[ActiveLayer].TextColor; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Layer background color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetBackColor(uint32_t Color) -{ - DrawProp[ActiveLayer].BackColor = Color; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint32_t BSP_LCD_GetBackColor(void) -{ - return DrawProp[ActiveLayer].BackColor; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Layer font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp[ActiveLayer].pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used layer font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp[ActiveLayer].pFont; -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint32_t ret = 0; - - if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888) - { - /* Read data value from SDRAM memory */ - ret = (*(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF); - } - else if((hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88)) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint16_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint8_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - - return ret; -} - -/** - * @brief Clears the whole currently active layer of LTDC. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint32_t Color) -{ - /* Clear the LCD */ - LL_FillBuffer(ActiveLayer, (uint32_t *)(hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color); -} - -/** - * @brief Clears the selected line in currently active layer. - * @param Line: Line to be cleared - */ -void BSP_LCD_ClearStringLine(uint32_t Line) -{ - uint32_t color_backup = DrawProp[ActiveLayer].TextColor; - DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor; - - /* Draw rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height); - - DrawProp[ActiveLayer].TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays one character in currently active layer. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\ - DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters in currently active layer. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Check that the Start column is located in the screen */ - if ((refcolumn < 1) || (refcolumn >= 0x8000)) - { - refcolumn = 1; - } - - /* Send the string character by character on LCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp[ActiveLayer].pFont->Width; - - /* Point on the next character */ - Text++; - i++; - } - -} - -/** - * @brief Displays a maximum of 60 characters on the LCD. - * @param Line: Line where to display the character shape - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Draws an horizontal line in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a vertical line in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws an uni-line (between two points) in currently active layer. - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - CurX = 0; - CurY = Radius; - - while (CurX <= CurY) - { - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } -} - -/** - * @brief Draws an poly-line (between many points) in currently active layer. - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - BSP_LCD_DrawLine(X, Y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture loaded in the internal Flash (32 bpp) in currently active layer. - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address in the internal Flash - */ -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; - uint32_t Address; - uint32_t InputColorMode = 0; - - /* Get bitmap data address offset */ - index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16) + (pbmp[13] << 24); - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - /* Read bit/pixel */ - bit_pixel = pbmp[28] + (pbmp[29] << 8); - - /* Set the address */ - Address = hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); - - /* Get the layer pixel format */ - if ((bit_pixel/8) == 4) - { - InputColorMode = CM_ARGB8888; - } - else if ((bit_pixel/8) == 2) - { - InputColorMode = CM_RGB565; - } - else - { - InputColorMode = CM_RGB888; - } - - /* Bypass the bitmap header */ - pbmp += (index + (width * (height - 1) * (bit_pixel/8))); - - /* Convert picture to ARGB8888 pixel format */ - for(index=0; index < height; index++) - { - /* Pixel format conversion */ - LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)Address, width, InputColorMode); - - /* Increment the source and destination buffers */ - Address+= (BSP_LCD_GetXSize()*4); - pbmp -= width*(bit_pixel/8); - } -} - -/** - * @brief Draws a full rectangle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - uint32_t Xaddress = 0; - - /* Set the text color */ - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - /* Get the rectangle start address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Fill the rectangle */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a full circle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - - CurX = 0; - CurY = Radius; - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - while (CurX <= CurY) - { - if(CurY > 0) - { - BSP_LCD_DrawHLine(Xpos - CurY, Ypos + CurX, 2*CurY); - BSP_LCD_DrawHLine(Xpos - CurY, Ypos - CurX, 2*CurY); - } - - if(CurX > 0) - { - BSP_LCD_DrawHLine(Xpos - CurX, Ypos - CurY, 2*CurX); - BSP_LCD_DrawHLine(Xpos - CurX, Ypos + CurY, 2*CurX); - } - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points) in currently active layer. - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos+y), (2*(uint16_t)(x/K) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos-y), (2*(uint16_t)(x/K) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Switch back on the display if was switched off by previous call of BSP_LCD_DisplayOff(). - * Exit DSI ULPM mode if was allowed and configured in Dsi Configuration. - */ -void BSP_LCD_DisplayOn(void) -{ - /* Send Display on DCS command to display */ - HAL_DSI_ShortWrite(&(hdsi_eval), - hdsivideo_handle.VirtualChannelID, - DSI_DCS_SHORT_PKT_WRITE_P1, - OTM8009A_CMD_DISPON, - 0x00); - -} - -/** - * @brief Switch Off the display. - * Enter DSI ULPM mode if was allowed and configured in Dsi Configuration. - */ -void BSP_LCD_DisplayOff(void) -{ - /* Send Display off DCS Command to display */ - HAL_DSI_ShortWrite(&(hdsi_eval), - hdsivideo_handle.VirtualChannelID, - DSI_DCS_SHORT_PKT_WRITE_P1, - OTM8009A_CMD_DISPOFF, - 0x00); - -} - -/** - * @brief DCS or Generic short/long write command - * @param NbrParams: Number of parameters. It indicates the write command mode: - * If inferior to 2, a long write command is performed else short. - * @param pParams: Pointer to parameter values table. - * @retval HAL status - */ -void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams) -{ - if(NbrParams <= 1) - { - HAL_DSI_ShortWrite(&hdsi_eval, LCD_OTM8009A_ID, DSI_DCS_SHORT_PKT_WRITE_P1, pParams[0], pParams[1]); - } - else - { - HAL_DSI_LongWrite(&hdsi_eval, LCD_OTM8009A_ID, DSI_DCS_LONG_PKT_WRITE, NbrParams, pParams[NbrParams], pParams); - } -} - -/******************************************************************************* - LTDC, DMA2D and DSI BSP Routines -*******************************************************************************/ -/** - * @brief Handles DMA2D interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_DMA2D_IRQHandler(void) -{ - HAL_DMA2D_IRQHandler(&hdma2d_eval); -} - -/** - * @brief Handles DSI interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_DSI_IRQHandler(void) -{ - HAL_DSI_IRQHandler(&(hdsi_eval)); -} - - -/** - * @brief Handles LTDC interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_LTDC_IRQHandler(void) -{ - HAL_LTDC_IRQHandler(&(hltdc_eval)); -} - -/** - * @brief De-Initializes the BSP LCD Msp - * Application can surcharge if needed this function implementation. - */ -__weak void BSP_LCD_MspDeInit(void) -{ - /** @brief Disable IRQ of LTDC IP */ - HAL_NVIC_DisableIRQ(LTDC_IRQn); - - /** @brief Disable IRQ of DMA2D IP */ - HAL_NVIC_DisableIRQ(DMA2D_IRQn); - - /** @brief Disable IRQ of DSI IP */ - HAL_NVIC_DisableIRQ(DSI_IRQn); - - /** @brief Force and let in reset state LTDC, DMA2D and DSI Host + Wrapper IPs */ - __HAL_RCC_LTDC_FORCE_RESET(); - __HAL_RCC_DMA2D_FORCE_RESET(); - __HAL_RCC_DSI_FORCE_RESET(); - - /** @brief Disable the LTDC, DMA2D and DSI Host and Wrapper clocks */ - __HAL_RCC_LTDC_CLK_DISABLE(); - __HAL_RCC_DMA2D_CLK_DISABLE(); - __HAL_RCC_DSI_CLK_DISABLE(); -} - -/** - * @brief Initialize the BSP LCD Msp. - * Application can surcharge if needed this function implementation - */ -__weak void BSP_LCD_MspInit(void) -{ - /** @brief Enable the LTDC clock */ - __HAL_RCC_LTDC_CLK_ENABLE(); - - /** @brief Toggle Sw reset of LTDC IP */ - __HAL_RCC_LTDC_FORCE_RESET(); - __HAL_RCC_LTDC_RELEASE_RESET(); - - /** @brief Enable the DMA2D clock */ - __HAL_RCC_DMA2D_CLK_ENABLE(); - - /** @brief Toggle Sw reset of DMA2D IP */ - __HAL_RCC_DMA2D_FORCE_RESET(); - __HAL_RCC_DMA2D_RELEASE_RESET(); - - /** @brief Enable DSI Host and wrapper clocks */ - __HAL_RCC_DSI_CLK_ENABLE(); - - /** @brief Soft Reset the DSI Host and wrapper */ - __HAL_RCC_DSI_FORCE_RESET(); - __HAL_RCC_DSI_RELEASE_RESET(); - - /** @brief NVIC configuration for LTDC interrupt that is now enabled */ - HAL_NVIC_SetPriority(LTDC_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(LTDC_IRQn); - - /** @brief NVIC configuration for DMA2D interrupt that is now enabled */ - HAL_NVIC_SetPriority(DMA2D_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(DMA2D_IRQn); - - /** @brief NVIC configuration for DSI interrupt that is now enabled */ - HAL_NVIC_SetPriority(DSI_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(DSI_IRQn); -} - -/** - * @brief This function handles LTDC Error interrupt Handler. - * @note : Can be surcharged by application code implementation of the function. - */ - -__weak void BSP_LCD_LTDC_ER_IRQHandler(void) -{ - HAL_LTDC_IRQHandler(&(hltdc_eval)); -} - - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code) -{ - /* Write data value to all SDRAM memory */ - *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code; -} - - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp[ActiveLayer].pFont->Height; - width = DrawProp[ActiveLayer].pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Fills a buffer. - * @param LayerIndex: Layer index - * @param pDst: Pointer to destination buffer - * @param xSize: Buffer width - * @param ySize: Buffer height - * @param OffLine: Offset - * @param ColorIndex: Color index - */ -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex) -{ - /* Register to memory mode with ARGB8888 as color Mode */ - hdma2d_eval.Init.Mode = DMA2D_R2M; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = OffLine; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, LayerIndex) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @brief Converts a line to an ARGB8888 pixel format. - * @param pSrc: Pointer to source buffer - * @param pDst: Output color - * @param xSize: Buffer width - * @param ColorMode: Input color mode - */ -static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode) -{ - /* Configure the DMA2D Mode, Color Mode and output offset */ - hdma2d_eval.Init.Mode = DMA2D_M2M_PFC; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = 0; - - /* Foreground Configuration */ - hdma2d_eval.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; - hdma2d_eval.LayerCfg[1].InputAlpha = 0xFF; - hdma2d_eval.LayerCfg[1].InputColorMode = ColorMode; - hdma2d_eval.LayerCfg[1].InputOffset = 0; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, 1) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.h deleted file mode 100644 index 86be61bf33..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_lcd.h +++ /dev/null @@ -1,389 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_LCD_H -#define __STM32469I_DISCOVERY_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include LCD component Driver */ - -/* Include OTM8009A LCD Driver IC driver code */ -#include "../Components/otm8009a/otm8009a.h" -/* Include NT35510 LCD Driver IC driver code */ -#include "../Components/nt35510/nt35510.h" - -/* Include SDRAM Driver */ -#include "stm32469i_discovery_sdram.h" -#include "stm32469i_discovery.h" -#include "../../../Utilities/Fonts/fonts.h" - -#include /* use of memset() */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_LCD - * @{ - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Constants STM32469I Discovery LCD Exported Constants - * @{ - */ - -#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef -/** - * @brief LCD FB_StartAddress - */ -#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000) - -/** @brief Maximum number of LTDC layers - */ -#define LTDC_MAX_LAYER_NUMBER ((uint32_t) 2) - -/** @brief LTDC Background layer index - */ -#define LTDC_ACTIVE_LAYER_BACKGROUND ((uint32_t) 0) - -/** @brief LTDC Foreground layer index - */ -#define LTDC_ACTIVE_LAYER_FOREGROUND ((uint32_t) 1) - -/** @brief Number of LTDC layers - */ -#define LTDC_NB_OF_LAYERS ((uint32_t) 2) - -/** @brief LTDC Default used layer index - */ -#define LTDC_DEFAULT_ACTIVE_LAYER LTDC_ACTIVE_LAYER_FOREGROUND - -/** - * @brief LCD status structure definition - */ -#define LCD_OK 0x00 -#define LCD_ERROR 0x01 -#define LCD_TIMEOUT 0x02 - -/** - * @brief LCD Display OTM8009A ID - */ -#define LCD_OTM8009A_ID ((uint32_t) 0) - -/** - * @brief LCD color definitions values - * in ARGB8888 format. - */ - -/** @brief Blue value in ARGB8888 format - */ -#define LCD_COLOR_BLUE ((uint32_t) 0xFF0000FF) - -/** @brief Green value in ARGB8888 format - */ -#define LCD_COLOR_GREEN ((uint32_t) 0xFF00FF00) - -/** @brief Red value in ARGB8888 format - */ -#define LCD_COLOR_RED ((uint32_t) 0xFFFF0000) - -/** @brief Cyan value in ARGB8888 format - */ -#define LCD_COLOR_CYAN ((uint32_t) 0xFF00FFFF) - -/** @brief Magenta value in ARGB8888 format - */ -#define LCD_COLOR_MAGENTA ((uint32_t) 0xFFFF00FF) - -/** @brief Yellow value in ARGB8888 format - */ -#define LCD_COLOR_YELLOW ((uint32_t) 0xFFFFFF00) - -/** @brief Light Blue value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTBLUE ((uint32_t) 0xFF8080FF) - -/** @brief Light Green value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTGREEN ((uint32_t) 0xFF80FF80) - -/** @brief Light Red value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTRED ((uint32_t) 0xFFFF8080) - -/** @brief Light Cyan value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTCYAN ((uint32_t) 0xFF80FFFF) - -/** @brief Light Magenta value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTMAGENTA ((uint32_t) 0xFFFF80FF) - -/** @brief Light Yellow value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTYELLOW ((uint32_t) 0xFFFFFF80) - -/** @brief Dark Blue value in ARGB8888 format - */ -#define LCD_COLOR_DARKBLUE ((uint32_t) 0xFF000080) - -/** @brief Light Dark Green value in ARGB8888 format - */ -#define LCD_COLOR_DARKGREEN ((uint32_t) 0xFF008000) - -/** @brief Light Dark Red value in ARGB8888 format - */ -#define LCD_COLOR_DARKRED ((uint32_t) 0xFF800000) - -/** @brief Dark Cyan value in ARGB8888 format - */ -#define LCD_COLOR_DARKCYAN ((uint32_t) 0xFF008080) - -/** @brief Dark Magenta value in ARGB8888 format - */ -#define LCD_COLOR_DARKMAGENTA ((uint32_t) 0xFF800080) - -/** @brief Dark Yellow value in ARGB8888 format - */ -#define LCD_COLOR_DARKYELLOW ((uint32_t) 0xFF808000) - -/** @brief White value in ARGB8888 format - */ -#define LCD_COLOR_WHITE ((uint32_t) 0xFFFFFFFF) - -/** @brief Light Gray value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTGRAY ((uint32_t) 0xFFD3D3D3) - -/** @brief Gray value in ARGB8888 format - */ -#define LCD_COLOR_GRAY ((uint32_t) 0xFF808080) - -/** @brief Dark Gray value in ARGB8888 format - */ -#define LCD_COLOR_DARKGRAY ((uint32_t) 0xFF404040) - -/** @brief Black value in ARGB8888 format - */ -#define LCD_COLOR_BLACK ((uint32_t) 0xFF000000) - -/** @brief Brown value in ARGB8888 format - */ -#define LCD_COLOR_BROWN ((uint32_t) 0xFFA52A2A) - -/** @brief Orange value in ARGB8888 format - */ -#define LCD_COLOR_ORANGE ((uint32_t) 0xFFFFA500) - -/** @brief Transparent value in ARGB8888 format - */ -#define LCD_COLOR_TRANSPARENT ((uint32_t) 0xFF000000) - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @brief Possible values of - * pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets - */ - -#define LCD_DSI_PIXEL_DATA_FMT_RBG888 DSI_RGB888 /*!< DSI packet pixel format chosen is RGB888 : 24 bpp */ -#define LCD_DSI_PIXEL_DATA_FMT_RBG565 DSI_RGB565 /*!< DSI packet pixel format chosen is RGB565 : 16 bpp */ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Types STM32469I Discovery LCD Exported Types - * @{ - */ - -/** -* @brief LCD Drawing main properties -*/ -typedef struct -{ - uint32_t TextColor; /*!< Specifies the color of text */ - uint32_t BackColor; /*!< Specifies the background color below the text */ - sFONT *pFont; /*!< Specifies the font used for the text */ - -} LCD_DrawPropTypeDef; - -/** - * @brief LCD Drawing point (pixel) geometric definition - */ -typedef struct -{ - int16_t X; /*!< geometric X position of drawing */ - int16_t Y; /*!< geometric Y position of drawing */ - -} Point; - -/** - * @brief Pointer on LCD Drawing point (pixel) geometric definition - */ -typedef Point * pPoint; - -/** - * @brief LCD drawing Line alignment mode definitions - */ -typedef enum -{ - CENTER_MODE = 0x01, /*!< Center mode */ - RIGHT_MODE = 0x02, /*!< Right mode */ - LEFT_MODE = 0x03 /*!< Left mode */ - -} Text_AlignModeTypdef; - - -/** - * @brief LCD_OrientationTypeDef - * Possible values of Display Orientation - */ -typedef enum -{ - LCD_ORIENTATION_PORTRAIT = 0x00, /*!< Portrait orientation choice of LCD screen */ - LCD_ORIENTATION_LANDSCAPE = 0x01, /*!< Landscape orientation choice of LCD screen */ - LCD_ORIENTATION_INVALID = 0x02 /*!< Invalid orientation choice of LCD screen */ -} LCD_OrientationTypeDef; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Macro STM32469I Discovery LCD Exported Macro - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Functions STM32469I Discovery LCD Exported Functions - * @{ - */ -void BSP_LCD_DMA2D_IRQHandler(void); -void BSP_LCD_DSI_IRQHandler(void); -void BSP_LCD_LTDC_IRQHandler(void); -void BSP_LCD_LTDC_ER_IRQHandler(void); - -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_InitEx(LCD_OrientationTypeDef orientation); - -void BSP_LCD_MspDeInit(void); -void BSP_LCD_MspInit(void); -void BSP_LCD_Reset(void); - -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); -void BSP_LCD_SetXSize(uint32_t imageWidthPixels); -void BSP_LCD_SetYSize(uint32_t imageHeightPixels); - -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address); -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex); -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); - -void BSP_LCD_SelectLayer(uint32_t LayerIndex); -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State); - -void BSP_LCD_SetTextColor(uint32_t Color); -uint32_t BSP_LCD_GetTextColor(void); -void BSP_LCD_SetBackColor(uint32_t Color); -uint32_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel); -void BSP_LCD_Clear(uint32_t Color); -void BSP_LCD_ClearStringLine(uint32_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp); - -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Exported_Variables STM32469I EVAL LCD Exported Variables - * @{ - */ - -/* @brief DMA2D handle variable */ -extern DMA2D_HandleTypeDef hdma2d_eval; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_LCD_Exported_Variables STM32469I Discovery LCD Exported Variables - * @{ - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_LCD_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.c deleted file mode 100644 index 4f710d83be..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.c +++ /dev/null @@ -1,755 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_qspi.c - * @author MCD Application Team - * @brief This file includes a standard driver for the N25Q128A QSPI - * memory mounted on STM32469I-Discovery board. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - (#) This driver is used to drive the N25Q128A QSPI external - memory mounted on STM32469I-Discovery board. - - (#) This driver need a specific component driver N25Q128A to be included with. - - (#) Initialization steps: - (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This - function includes the MSP layer hardware resources initialization and the - QSPI interface with the external memory. - - (#) QSPI memory operations - (++) QSPI memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_QSPI_Read()/BSP_QSPI_Write(). - (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. - (see the QSPI memory data sheet) - (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_QSPI_Erase_Chip(). - (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. - (see the QSPI memory data sheet) - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_qspi.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I_Discovery_QSPI STM32469I Discovery QSPI - * @{ - */ - - -/* Private variables ---------------------------------------------------------*/ - - -/** @defgroup STM32469I_Discovery_QSPI_Private_Variables STM32469I Discovery QSPI Private Variables - * @{ - */ -QSPI_HandleTypeDef QSPIHandle; - -/** - * @} - */ - - - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup STM32469I_Discovery_QSPI_Private_Functions STM32469I Discovery QSPI Private Functions - * @{ - */ -static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_AutoPollingMemReady (QSPI_HandleTypeDef *hqspi, uint32_t Timeout); - - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_QSPI_Exported_Functions STM32469I Discovery QSPI Exported Functions - * @{ - */ - -/** - * @brief Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Init(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level initialization */ - BSP_QSPI_MspInit(&QSPIHandle, NULL); - - /* QSPI initialization */ - QSPIHandle.Init.ClockPrescaler = 1; /* QSPI Freq= 180 MHz / (1+1) = 90 MHz */ - QSPIHandle.Init.FifoThreshold = 1; - QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; - QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; - QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; - QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; - QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; - QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; - - if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* QSPI memory reset */ - if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - - /* Configuration of the dummy cucles on QSPI memory side */ - if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - return QSPI_OK; -} - -/** - * @brief De-Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_DeInit(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level De-initialization */ - BSP_QSPI_MspDeInit(&QSPIHandle, NULL); - - return QSPI_OK; -} - -/** - * @brief Reads an amount of data from the QSPI memory. - * @param pData: Pointer to data to be read - * @param ReadAddr: Read start address - * @param Size: Size of data to read - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the read command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = ReadAddr; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.NbData = Size; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Set S# timing for Read command: Min 20ns for N25Q128A memory */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Restore S# timing for nonRead commands */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); - - return QSPI_OK; -} - -/** - * @brief Writes an amount of data to the QSPI memory. - * @param pData: Pointer to data to be written - * @param WriteAddr: Write start address - * @param Size: Size of data to write - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - uint32_t end_addr, current_size, current_addr; - - /* Calculation of the size between the write address and the end of the page */ - current_size = N25Q128A_PAGE_SIZE - (WriteAddr % N25Q128A_PAGE_SIZE); - - /* Check if the size of the data is less than the remaining place in the page */ - if (current_size > Size) - { - current_size = Size; - } - - /* Initialize the address variables */ - current_addr = WriteAddr; - end_addr = WriteAddr + Size; - - /* Initialize the program command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = EXT_QUAD_IN_FAST_PROG_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Perform the write page by page */ - do - { - s_command.Address = current_addr; - s_command.NbData = current_size; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of program */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update the address and size variables for next page programming */ - current_addr += current_size; - pData += current_size; - current_size = ((current_addr + N25Q128A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q128A_PAGE_SIZE; - } while (current_addr < end_addr); - - return QSPI_OK; -} - -/** - * @brief Erases the specified block of the QSPI memory. - * @param BlockAddress: Block address to erase - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = SUBSECTOR_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = BlockAddress; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Erases the entire QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Chip(void) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = BULK_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_BULK_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Reads current status of the QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetStatus(void) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read flag status register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_FLAG_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg & (N25Q128A_FSR_PRERR | N25Q128A_FSR_VPPERR | N25Q128A_FSR_PGERR | N25Q128A_FSR_ERERR)) != 0) - { - return QSPI_ERROR; - } - else if ((reg & (N25Q128A_FSR_PGSUS | N25Q128A_FSR_ERSUS)) != 0) - { - return QSPI_SUSPENDED; - } - else if ((reg & N25Q128A_FSR_READY) != 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } -} - -/** - * @brief Reads the configuration of the memory and fills QspiInfo struct - * @param pInfo pointer to Info structure - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetInfo(QSPI_InfoTypeDef* pInfo) -{ - /* Configure the structure with the memory configuration */ - pInfo->FlashSize = N25Q128A_FLASH_SIZE; - pInfo->EraseSectorSize = N25Q128A_SUBSECTOR_SIZE; - pInfo->EraseSectorsNumber = (N25Q128A_FLASH_SIZE/N25Q128A_SUBSECTOR_SIZE); - pInfo->ProgPageSize = N25Q128A_PAGE_SIZE; - pInfo->ProgPagesNumber = (N25Q128A_FLASH_SIZE/N25Q128A_PAGE_SIZE); - - return QSPI_OK; -} - -/** - * @brief Configure the QSPI in memory-mapped mode - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_EnableMemoryMappedMode(void) -{ - QSPI_CommandTypeDef s_command; - QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; - - /* Configure the command for the read instruction */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the memory mapped mode */ - s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; - - if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_QSPI_Private_Functions STM32469I Discovery QSPI Private Functions - * @{ - */ - -/** - * @brief QSPI MSP Initialization - * This function configures the hardware resources used in this example: - * - Peripheral's clock enable - * - Peripheral's GPIO Configuration - * - NVIC configuration for QSPI interrupt - */ -__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*##-1- Enable peripherals and GPIO Clocks #################################*/ - /* Enable the QuadSPI memory interface clock */ - QSPI_CLK_ENABLE(); - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - /* Enable GPIO clocks */ - QSPI_CS_GPIO_CLK_ENABLE(); - QSPI_DX_CLK_GPIO_CLK_ENABLE(); - - /*##-2- Configure peripheral GPIO ##########################################*/ - /* QSPI CS GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CS_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); - - /* QSPI CLK GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CLK_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); - - /* QSPI D0 and D1 GPIO pin configuration */ - gpio_init_structure.Pin = (QSPI_D0_PIN | QSPI_D1_PIN); - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); - - /* QSPI D2 and D3 GPIO pin configuration */ - gpio_init_structure.Pin = (QSPI_D2_PIN | QSPI_D3_PIN) ; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); - - /*##-3- Configure the NVIC for QSPI #########################################*/ - /* NVIC configuration for QSPI interrupt */ - HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(QUADSPI_IRQn); - -} - -/** - * @brief QSPI MSP De-Initialization - * This function frees the hardware resources used in this example: - * - Disable the Peripheral's clock - * - Revert GPIO and NVIC configuration to their default state - */ -__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - /*##-1- Disable the NVIC for QSPI ###########################################*/ - HAL_NVIC_DisableIRQ(QUADSPI_IRQn); - - /*##-2- Disable peripherals and GPIO Clocks ################################*/ - /* De-Configure QSPI pins */ - HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN); - HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D0_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D1_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D2_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D3_PIN); - - /*##-3- Reset peripherals ##################################################*/ - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - - /* Disable the QuadSPI memory interface clock */ - QSPI_CLK_DISABLE(); -} - -/** - * @brief This function reset the QSPI memory. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the reset enable command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = RESET_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Send the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Send the reset memory command */ - s_command.Instruction = RESET_MEMORY_CMD; - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function configure the dummy cycles on memory side. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read volatile configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_VOL_CFG_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(hqspi) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update volatile configuration register (with new dummy cycles) */ - s_command.Instruction = WRITE_VOL_CFG_REG_CMD; - MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function send a Write Enable and wait it is effective. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Enable write operations */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = WRITE_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for write enabling */ - s_config.Match = N25Q128A_SR_WREN; - s_config.Mask = N25Q128A_SR_WREN; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.DataMode = QSPI_DATA_1_LINE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function read the SR of the memory and wait the EOP. - * @param hqspi: QSPI handle - * @param Timeout: timeout value before returning an error - */ -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - s_config.Match = 0; - s_config.Mask = N25Q128A_SR_WIP; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.h deleted file mode 100644 index a696fe61fc..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_qspi.h +++ /dev/null @@ -1,145 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_qspi.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_qspi.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_QSPI_H -#define __STM32469I_DISCOVERY_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "../Components/n25q128a/n25q128a.h" - - -/** @addtogroup STM32469I_Discovery_QSPI - * @{ - */ - - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup STM32469I_Discovery_QSPI_Exported_Constants STM32469I Discovery QSPI Exported Constants - * @{ - */ -/* QSPI Error codes */ -#define QSPI_OK ((uint8_t)0x00) -#define QSPI_ERROR ((uint8_t)0x01) -#define QSPI_BUSY ((uint8_t)0x02) -#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) -#define QSPI_SUSPENDED ((uint8_t)0x08) - - -/* Definition for QSPI clock resources */ -#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() -#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() -#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define QSPI_DX_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_DX_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() -#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() - -/* Definition for QSPI Pins */ -#define QSPI_CS_PIN GPIO_PIN_6 -#define QSPI_CS_GPIO_PORT GPIOB -#define QSPI_CLK_PIN GPIO_PIN_10 -#define QSPI_CLK_GPIO_PORT GPIOF -#define QSPI_D0_PIN GPIO_PIN_8 -#define QSPI_D1_PIN GPIO_PIN_9 -#define QSPI_D2_PIN GPIO_PIN_7 -#define QSPI_D3_PIN GPIO_PIN_6 -#define QSPI_DX_GPIO_PORT GPIOF - - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup STM32469I_Discovery_QSPI_Exported_Types STM32469I Discovery QSPI Exported Types - * @{ - */ -/** - * @brief QSPI Info - * */ -typedef struct { - uint32_t FlashSize; /*!< Size of the flash */ - uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ - uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ - uint32_t ProgPageSize; /*!< Size of pages for the program operation */ - uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ -} QSPI_InfoTypeDef; - -/** - * @} - */ - - -/* Exported functions --------------------------------------------------------*/ -/** @addtogroup STM32469I_Discovery_QSPI_Exported_Functions STM32469I Discovery QSPI Exported Functions - * @{ - */ -uint8_t BSP_QSPI_Init (void); -uint8_t BSP_QSPI_DeInit (void); -uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); -uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_QSPI_Erase_Chip (void); -uint8_t BSP_QSPI_GetStatus (void); -uint8_t BSP_QSPI_GetInfo (QSPI_InfoTypeDef* pInfo); -uint8_t BSP_QSPI_EnableMemoryMappedMode(void); -/* BSP Aliased function maintained for legacy purpose */ -#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); -void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_QSPI_H */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.c deleted file mode 100644 index f629130efb..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.c +++ /dev/null @@ -1,578 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM32469I-Discovery - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM32469I-Discovery - board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the board. - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_SD STM32469I Discovery SD - * @{ - */ - - -/** @defgroup STM32469I-Discovery_SD_Private_TypesDefinitions STM32469I Discovery SD Private TypesDef - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Private_Defines STM32469I Discovery SD Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Private_Macros STM32469I Discovery SD Private Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Private_Variables STM32469I Discovery SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Private_FunctionPrototypes STM32469I Discovery SD Private Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Private_Functions STM32469I Discovery SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t sd_state = MSD_OK; - - /* PLLSAI is dedicated to LCD periph. Do not use it to get 48MHz*/ - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Msp SD Detect pin initialization */ - BSP_SD_Detect_MspInit(&uSdHandle, NULL); - if(BSP_SD_IsDetected() != SD_PRESENT) /* Check if SD card is present */ - { - return MSD_ERROR_SD_NOT_PRESENT; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - /* HAL SD initialization */ - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(sd_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - sd_state = MSD_ERROR; - } - else - { - sd_state = MSD_OK; - } - } - return sd_state; -} - -/** - * @brief DeInitializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_DeInit(void) -{ - uint8_t sd_state = MSD_OK; - - uSdHandle.Instance = SDIO; - - /* HAL SD deinitialization */ - if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Msp SD deinitialization */ - uSdHandle.Instance = SDIO; - BSP_SD_MspDeInit(&uSdHandle, NULL); - - return sd_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns 0 - */ -uint8_t BSP_SD_ITConfig(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Configure Interrupt mode for SD detection pin */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_RISING_FALLING; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); - - /* Enable and set SD detect EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(SD_DETECT_EXTI_IRQn), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(SD_DETECT_EXTI_IRQn)); - - return MSD_OK; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if (HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == GPIO_PIN_SET) - { - status = SD_NOT_PRESENT; - } - - return status; -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_rx_handle.Init.Mode = DMA_PFCTRL; - dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_rx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_rx_handle); - - /* Configure DMA Tx parameters */ - dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_tx_handle.Init.Mode = DMA_PFCTRL; - dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_tx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_tx_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief Initializes the SD Detect pin MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - SD_DETECT_GPIO_CLK_ENABLE(); - - /* GPIO configuration in input for uSD_Detect signal */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief DeInitializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - - /* Disable NVIC for DMA transfer complete interrupts */ - HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); - HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - HAL_DMA_DeInit(&dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - HAL_DMA_DeInit(&dma_tx_handle); - - /* Disable NVIC for SDIO interrupts */ - HAL_NVIC_DisableIRQ(SDIO_IRQn); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* Disable SDIO clock */ - __HAL_RCC_SDIO_CLK_DISABLE(); - - /* GPOI pins clock and DMA cloks can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - * @retval None - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - * @retval None - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.h deleted file mode 100644 index 7259ffde37..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sd.h +++ /dev/null @@ -1,143 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_SD_H -#define __STM32469I_DISCOVERY_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_SD - * @{ - */ - -/** @defgroup STM32469I-Discovery_SD_Exported_Types STM32469I Discovery SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) -#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - -/** @defgroup STM32469I-Discovery_SD_Exported_Constants STM32469I Discovery SD Exported Constants - * @{ - */ -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8) -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Exported_Macro STM32469I Discovery SD Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SD_Exported_Functions STM32469I Discovery SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_SD_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.c deleted file mode 100644 index 8415ed504f..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.c +++ /dev/null @@ -1,508 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_sdram.c - * @author MCD Application Team - * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory - * device mounted on STM32469I-Discovery board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted - on STM32469I-Discovery board. - - This driver does not need a specific component driver for the SDRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SDRAM memory. - o It contains the SDRAM initialization sequence to program the SDRAM external - device using the function BSP_SDRAM_Initialization_sequence(). Note that this - sequence is standard for all SDRAM devices, but can include some differences - from a device to another. If it is the case, the right sequence should be - implemented separately. - - + SDRAM read/write operations - o SDRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions - BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA(). - o The AHB access is performed with 32-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) word transfer (see the - BSP_SDRAM_MspInit() weak function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - o You can send a command to the SDRAM device in runtime using the function - BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between - the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_sdram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_SDRAM STM32469I Discovery SDRAM - * @{ - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Types_Definitions STM32469I Discovery SDRAM Private TypesDef - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Defines STM32469I Discovery SDRAM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Macros STM32469I Discovery SDRAM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Variables STM32469I Discovery SDRAM Private Variables - * @{ - */ -static SDRAM_HandleTypeDef sdramHandle; -static FMC_SDRAM_TimingTypeDef Timing; -static FMC_SDRAM_CommandTypeDef Command; -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Function_Prototypes STM32469I Discovery SDRAM Private Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Private_Functions STM32469I Discovery SDRAM Private Functions - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I_Discovery_SDRAM_Exported_Functions STM32469I Discovery SDRAM Exported Functions - * @{ - */ - -/** - * @brief Initializes the SDRAM device. - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_Init(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - /* Timing configuration for 90 MHz as SD clock frequency (System clock is up to 180 MHz) */ - Timing.LoadToActiveDelay = 2; - Timing.ExitSelfRefreshDelay = 7; - Timing.SelfRefreshTime = 4; - Timing.RowCycleDelay = 7; - Timing.WriteRecoveryTime = 2; - Timing.RPDelay = 2; - Timing.RCDDelay = 2; - - sdramHandle.Init.SDBank = FMC_SDRAM_BANK1; - sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; - sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; - sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; - sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; - sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; - sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; - sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; - sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; - - /* SDRAM controller initialization */ - /* __weak function can be surcharged by the application code */ - BSP_SDRAM_MspInit(&sdramHandle, (void *)NULL); - if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM initialization sequence */ - BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); - - return sdramstatus; -} - -/** - * @brief DeInitializes the SDRAM device. - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_DeInit(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - if(HAL_SDRAM_DeInit(&sdramHandle) == HAL_OK) - { - sdramstatus = SDRAM_OK; - - /* SDRAM controller De-initialization */ - BSP_SDRAM_MspDeInit(&sdramHandle, (void *)NULL); - } - - return sdramstatus; -} - - -/** - * @brief Programs the SDRAM device. - * @param RefreshCount: SDRAM refresh counter value - */ -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) -{ - __IO uint32_t tmpmrd = 0; - - /* Step 1: Configure a clock configuration enable command */ - Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 2: Insert 100 us minimum delay */ - /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ - HAL_Delay(1); - - /* Step 3: Configure a PALL (precharge all) command */ - Command.CommandMode = FMC_SDRAM_CMD_PALL; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 4: Configure an Auto Refresh command */ - Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 8; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 5: Program the external memory mode register */ - tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\ - SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\ - SDRAM_MODEREG_CAS_LATENCY_3 |\ - SDRAM_MODEREG_OPERATING_MODE_STANDARD |\ - SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; - - Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = tmpmrd; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 6: Set the refresh rate counter */ - /* Set the device refresh rate */ - HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); -} - -/** - * @brief Reads an mount of data from the SDRAM memory in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Reads an mount of data from the SDRAM memory in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Sends command to the SDRAM bank. - * @param SdramCmd: Pointer to SDRAM command structure - * @retval HAL status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) -{ - if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Handles SDRAM DMA transfer interrupt request. - */ -void BSP_SDRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sdramHandle.hdma); -} - -/** - * @brief Initializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - GPIO_InitTypeDef gpio_init_structure; - - if(hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - __HAL_RCC_GPIOH_CLK_ENABLE(); - __HAL_RCC_GPIOI_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOC configuration : PC0 is SDNWE */ - gpio_init_structure.Pin = GPIO_PIN_0; - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8| GPIO_PIN_9 | GPIO_PIN_10 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); - - /* GPIOH configuration */ - gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOH, &gpio_init_structure); - - /* GPIOI configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9 | GPIO_PIN_10; - HAL_GPIO_Init(GPIOI, &gpio_init_structure); - - /* Configure common DMA parameters */ - dma_handle.Init.Channel = SDRAM_DMAx_CHANNEL; - dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; - dma_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_handle.Init.Mode = DMA_NORMAL; - dma_handle.Init.Priority = DMA_PRIORITY_HIGH; - dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; - dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dma_handle.Instance = SDRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsdram, hdma, dma_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); - - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @brief DeInitializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - - if(hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_handle.Instance = SDRAM_DMAx_STREAM; - HAL_DMA_DeInit(&dma_handle); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ - - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.h deleted file mode 100644 index fed1b3fcd7..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_sdram.h +++ /dev/null @@ -1,148 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_sdram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_sdram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_SDRAM_H -#define __STM32469I_DISCOVERY_SDRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_SDRAM - * @{ - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Exported_Types STM32469I Discovery SDRAM Exported Types - * @{ - */ - -/** - * @brief SDRAM status structure definition - */ -#define SDRAM_OK ((uint8_t)0x00) -#define SDRAM_ERROR ((uint8_t)0x01) - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Exported_Constants STM32469I Discovery SDRAM Exported Constants - * @{ - */ -#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000) - - /* SDRAM device size in Bytes */ - #define SDRAM_DEVICE_SIZE ((uint32_t)0x1000000) - -#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_32 -#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2 - -/* SDRAM refresh counter (90 MHz SD clock) */ -#define REFRESH_COUNT ((uint32_t)0x0569) -#define SDRAM_TIMEOUT ((uint32_t)0xFFFF) - -/* DMA definitions for SDRAM DMA transfer */ -#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define __DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE -#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SDRAM_DMAx_STREAM DMA2_Stream0 -#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler - - -/** - * @brief FMC SDRAM Mode definition register defines - */ -#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) -#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) -#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) -#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) -#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) -#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) -#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_SDRAM_Exported_Macro STM32469I Discovery SDRAM Exported Macro - * @{ - */ -/** - * @} - */ - -/** @addtogroup STM32469I_Discovery_SDRAM_Exported_Functions - * @{ - */ -uint8_t BSP_SDRAM_Init(void); -uint8_t BSP_SDRAM_DeInit(void); -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount); -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd); -void BSP_SDRAM_DMA_IRQHandler(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params); -void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_SDRAM_H */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.c b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.c deleted file mode 100644 index 571eb2f9b0..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.c +++ /dev/null @@ -1,461 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM32469I-Discovery board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM32469I-Discovery - board on the K.O.D Optica Technology 480x800 TFT-LCD mounted on - MB1189 board. The touch screen driver IC inside the K.O.D module KM-040TMP-02 - is a FT6206 by Focal Tech. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - The interrupt mode internally uses the IO functionalities driver driven by - the IO expander, to configure the IT line. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. - o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get - the interrupt status. To clear the IT pending bits, you should call the - function BSP_TS_ITClear(). - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery_ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @defgroup STM32469I-Discovery_TS STM32469I Discovery TS - * @{ - */ - -/** @defgroup STM32469I-Discovery_TS_Private_Types_Definitions STM32469I Discovery TS Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Private_Defines STM32469I Discovery TS Private Types Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Private_Macros STM32469I Discovery TS Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Imported_Variables STM32469I Discovery TS Imported Variables - * @{ - */ - /** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Private_Variables STM32469I Discovery TS Private Variables - * @{ - */ -static TS_DrvTypeDef *ts_driver; -static uint8_t ts_orientation; -uint8_t I2C_Address = 0; - -/* Table for touchscreen event information display on LCD : table indexed on enum @ref TS_TouchEventTypeDef information */ -char * ts_event_string_tab[TOUCH_EVENT_NB_MAX] = { "None", - "Press down", - "Lift up", - "Contact" - }; - -/* Table for touchscreen gesture Id information display on LCD : table indexed on enum @ref TS_GestureIdTypeDef information */ -char * ts_gesture_id_string_tab[GEST_ID_NB_MAX] = { "None", - "Move Up", - "Move Right", - "Move Down", - "Move Left", - "Zoom In", - "Zoom Out" - }; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Private_Function_Prototypes STM32469I Discovery TS Private Function Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Public_Functions STM32469I Discovery TS Public Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..). - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY) -{ - uint8_t ts_status = TS_OK; - uint8_t ts_id1, ts_id2 = 0; - /* Note : I2C_Address is un-initialized here, but is not used at all in init function */ - /* but the prototype of Init() is like that in template and should be respected */ - - /* Initialize the communication channel to sensor (I2C) if necessary */ - /* that is initialization is done only once after a power up */ - ft6x06_ts_drv.Init(I2C_Address); - - ts_id1 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS); - if(ts_id1 != FT6206_ID_VALUE) - { - ts_id2 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS_A02); - I2C_Address = TS_I2C_ADDRESS_A02; - } - else - { - I2C_Address = TS_I2C_ADDRESS; - } - - /* Scan FT6xx6 TouchScreen IC controller ID register by I2C Read */ - /* Verify this is a FT6206 or FT6336G, otherwise this is an error case */ - if((ts_id1 == FT6206_ID_VALUE) || (ts_id2 == FT6206_ID_VALUE) || (ts_id2 == FT6X36_ID2_VALUE)) - { - /* Found FT6206 : Initialize the TS driver structure */ - ts_driver = &ft6x06_ts_drv; - - /* Get LCD chosen orientation */ - if(ts_SizeX < ts_SizeY) - { - ts_orientation = TS_SWAP_NONE; - } - else - { - ts_orientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - ts_driver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - ts_driver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } - else - { - ts_status = TS_DEVICE_NOT_FOUND; - } - - return (ts_status); -} - -/** - * @brief Configures and enables the touch screen interrupts both at GPIO level and - * in TouchScreen IC driver configuration. - * @retval TS_OK if all initializations are OK. - */ -uint8_t BSP_TS_ITConfig(void) -{ - uint8_t ts_status = TS_OK; - GPIO_InitTypeDef gpio_init_structure; - - /* Msp Init of GPIO used for TS_INT pin coming from TouchScreen driver IC FT6x06 */ - /* When touchscreen is operated in interrupt mode */ - BSP_TS_INT_MspInit(); - - /* Configure Interrupt mode for TS_INT pin falling edge : when a new touch is available */ - /* TS_INT pin is active on low level on new touch available */ - gpio_init_structure.Pin = TS_INT_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure); - - /* Enable and set the TS_INT EXTI Interrupt to an intermediate priority */ - HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x05, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn)); - - /* Enable the TS in interrupt mode */ - /* In that case the INT output of FT6206 when new touch is available */ - /* is active on low level and directed on EXTI */ - ts_driver->EnableIT(I2C_Address); - - return (ts_status); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0}; - static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0}; - uint8_t ts_status = TS_OK; - uint16_t tmp; - uint16_t Raw_x[TS_MAX_NB_TOUCH]; - uint16_t Raw_y[TS_MAX_NB_TOUCH]; - uint16_t xDiff; - uint16_t yDiff; - uint32_t index; -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint32_t weight = 0; - uint32_t area = 0; - uint32_t event = 0; -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - /* Check and update the number of touches active detected */ - TS_State->touchDetected = ts_driver->DetectTouch(I2C_Address); - if(TS_State->touchDetected) - { - for(index=0; index < TS_State->touchDetected; index++) - { - /* Get each touch coordinates */ - ts_driver->GetXY(I2C_Address, &(Raw_x[index]), &(Raw_y[index])); - - if(ts_orientation & TS_SWAP_XY) - { - tmp = Raw_x[index]; - Raw_x[index] = Raw_y[index]; - Raw_y[index] = tmp; - } - - if(ts_orientation & TS_SWAP_X) - { - Raw_x[index] = FT_6206_MAX_WIDTH - 1 - Raw_x[index]; - } - - if(ts_orientation & TS_SWAP_Y) - { - Raw_y[index] = FT_6206_MAX_HEIGHT - 1 - Raw_y[index]; - } - - xDiff = Raw_x[index] > _x[index]? (Raw_x[index] - _x[index]): (_x[index] - Raw_x[index]); - yDiff = Raw_y[index] > _y[index]? (Raw_y[index] - _y[index]): (_y[index] - Raw_y[index]); - - if ((xDiff + yDiff) > 5) - { - _x[index] = Raw_x[index]; - _y[index] = Raw_y[index]; - } - - - TS_State->touchX[index] = _x[index]; - TS_State->touchY[index] = _y[index]; - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - - /* Get touch info related to the current touch */ - ft6x06_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event); - - /* Update TS_State structure */ - TS_State->touchWeight[index] = weight; - TS_State->touchArea[index] = area; - - /* Remap touch event */ - switch(event) - { - case FT6206_TOUCH_EVT_FLAG_PRESS_DOWN : - TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; - break; - case FT6206_TOUCH_EVT_FLAG_LIFT_UP : - TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; - break; - case FT6206_TOUCH_EVT_FLAG_CONTACT : - TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; - break; - case FT6206_TOUCH_EVT_FLAG_NO_EVENT : - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(event) */ - -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* of for(index=0; index < TS_State->touchDetected; index++) */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - /* Get gesture Id */ - ts_status = BSP_TS_Get_GestureId(TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* end of if(TS_State->touchDetected != 0) */ - - return (ts_status); -} - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Update gesture Id following a touch detected. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State) -{ - uint32_t gestureId = 0; - uint8_t ts_status = TS_OK; - - /* Get gesture Id */ - ft6x06_TS_GetGestureID(I2C_Address, &gestureId); - - /* Remap gesture Id to a TS_GestureIdTypeDef value */ - switch(gestureId) - { - case FT6206_GEST_ID_NO_GESTURE : - TS_State->gestureId = GEST_ID_NO_GESTURE; - break; - case FT6206_GEST_ID_MOVE_UP : - TS_State->gestureId = GEST_ID_MOVE_UP; - break; - case FT6206_GEST_ID_MOVE_RIGHT : - TS_State->gestureId = GEST_ID_MOVE_RIGHT; - break; - case FT6206_GEST_ID_MOVE_DOWN : - TS_State->gestureId = GEST_ID_MOVE_DOWN; - break; - case FT6206_GEST_ID_MOVE_LEFT : - TS_State->gestureId = GEST_ID_MOVE_LEFT; - break; - case FT6206_GEST_ID_ZOOM_IN : - TS_State->gestureId = GEST_ID_ZOOM_IN; - break; - case FT6206_GEST_ID_ZOOM_OUT : - TS_State->gestureId = GEST_ID_ZOOM_OUT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(gestureId) */ - - return(ts_status); -} - - -/** @defgroup STM32469I-Discovery_TS_Private_Functions STM32469I Discovery TS Private Functions - * @{ - */ - - -/** - * @brief Function used to reset all touch data before a new acquisition - * of touch information. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if OK, TE_ERROR if problem found. - */ -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State) -{ - uint8_t ts_status = TS_ERROR; - uint32_t index; - - if (TS_State != (TS_StateTypeDef *)NULL) - { - TS_State->gestureId = GEST_ID_NO_GESTURE; - TS_State->touchDetected = 0; - - for(index = 0; index < TS_MAX_NB_TOUCH; index++) - { - TS_State->touchX[index] = 0; - TS_State->touchY[index] = 0; - TS_State->touchArea[index] = 0; - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - TS_State->touchWeight[index] = 0; - } - - ts_status = TS_OK; - - } /* of if (TS_State != (TS_StateTypeDef *)NULL) */ - - return (ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ -/** - * @brief Initializes the TS_INT pin MSP. - */ -__weak void BSP_TS_INT_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - TS_INT_GPIO_CLK_ENABLE(); - - /* GPIO configuration in input for TouchScreen interrupt signal on TS_INT pin */ - gpio_init_structure.Pin = TS_INT_PIN; - - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure); -} - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.h b/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.h deleted file mode 100644 index 248a2bbec9..0000000000 --- a/Drivers/BSP/STM32469I-Discovery/stm32469i_discovery_ts.h +++ /dev/null @@ -1,192 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_discovery_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_discovery_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_DISCOVERY_TS_H -#define __STM32469I_DISCOVERY_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_discovery.h" -#include "stm32469i_discovery_lcd.h" - -/* Include TouchScreen component driver */ -#include "../Components/ft6x06/ft6x06.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_Discovery - * @{ - */ - -/** @addtogroup STM32469I-Discovery_TS - * @{ - */ - - /** @defgroup STM32469I-Discovery_TS_Exported_Constants STM32469I Discovery TS Exported Constants - * @{ - */ -/** @brief With FT6206 : maximum 2 touches detected simultaneously - */ -#define TS_MAX_NB_TOUCH ((uint32_t) FT6206_MAX_DETECTABLE_TOUCH) -#define TS_NO_IRQ_PENDING ((uint8_t) 0) -#define TS_IRQ_PENDING ((uint8_t) 1) - -#define TS_SWAP_NONE ((uint8_t) 0x01) -#define TS_SWAP_X ((uint8_t) 0x02) -#define TS_SWAP_Y ((uint8_t) 0x04) -#define TS_SWAP_XY ((uint8_t) 0x08) - - /** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Exported_Types STM32469I Discovery TS Exported Types - * @{ - */ -/** -* @brief TS_StateTypeDef -* Define TS State structure -*/ -typedef struct -{ - uint8_t touchDetected; /*!< Total number of active touches detected at last scan */ - uint16_t touchX[TS_MAX_NB_TOUCH]; /*!< Touch X[0], X[1] coordinates on 12 bits */ - uint16_t touchY[TS_MAX_NB_TOUCH]; /*!< Touch Y[0], Y[1] coordinates on 12 bits */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint8_t touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */ - uint8_t touchEventId[TS_MAX_NB_TOUCH]; /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */ - uint8_t touchArea[TS_MAX_NB_TOUCH]; /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */ - uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */ -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -} TS_StateTypeDef; - -/** - * @brief TS_StatusTypeDef - * Define BSP_TS_xxx() functions possible return value, - * when status is returned by those functions. - */ -typedef enum -{ - TS_OK = 0x00, /*!< Touch Ok */ - TS_ERROR = 0x01, /*!< Touch Error */ - TS_TIMEOUT = 0x02, /*!< Touch Timeout */ - TS_DEVICE_NOT_FOUND = 0x03 /*!< Touchscreen device not found */ -} TS_StatusTypeDef; - -/** - * @brief TS_GestureIdTypeDef - * Define Possible managed gesture identification values returned by touch screen - * driver. - */ -typedef enum -{ - GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */ - GEST_ID_MOVE_UP = 0x01, /*!< Gesture Move Up */ - GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */ - GEST_ID_MOVE_DOWN = 0x03, /*!< Gesture Move Down */ - GEST_ID_MOVE_LEFT = 0x04, /*!< Gesture Move Left */ - GEST_ID_ZOOM_IN = 0x05, /*!< Gesture Zoom In */ - GEST_ID_ZOOM_OUT = 0x06, /*!< Gesture Zoom Out */ - GEST_ID_NB_MAX = 0x07 /*!< max number of gesture id */ -} TS_GestureIdTypeDef; - -/** - * @brief TS_TouchEventTypeDef - * Define Possible touch events kind as returned values - * by touch screen IC Driver. - */ -typedef enum -{ - TOUCH_EVENT_NO_EVT = 0x00, /*!< Touch Event : undetermined */ - TOUCH_EVENT_PRESS_DOWN = 0x01, /*!< Touch Event Press Down */ - TOUCH_EVENT_LIFT_UP = 0x02, /*!< Touch Event Lift Up */ - TOUCH_EVENT_CONTACT = 0x03, /*!< Touch Event Contact */ - TOUCH_EVENT_NB_MAX = 0x04 /*!< max number of touch events kind */ -} TS_TouchEventTypeDef; - -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Imported_Variables STM32469I Discovery TS Imported Variables - * @{ - */ -/** - * @brief Table for touchscreen event information display on LCD : - * table indexed on enum @ref TS_TouchEventTypeDef information - */ -extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX]; - -/** - * @brief Table for touchscreen gesture Id information display on LCD : table indexed - * on enum @ref TS_GestureIdTypeDef information - */ -extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX]; -/** - * @} - */ - -/** @defgroup STM32469I-Discovery_TS_Exported_Functions STM32469I Discovery TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -uint8_t BSP_TS_ITConfig(void); - - -/* These __weak function can be surcharged by application code in case the current settings - need to be changed for specific (example GPIO allocation) */ -void BSP_TS_INT_MspInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_DISCOVERY_TS_H */ diff --git a/Drivers/BSP/STM32469I_EVAL b/Drivers/BSP/STM32469I_EVAL new file mode 160000 index 0000000000..cbacc11ad9 --- /dev/null +++ b/Drivers/BSP/STM32469I_EVAL @@ -0,0 +1 @@ +Subproject commit cbacc11ad9ec7990e5265a8924ff296219f18dbc diff --git a/Drivers/BSP/STM32469I_EVAL/LICENSE.md b/Drivers/BSP/STM32469I_EVAL/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32469I_EVAL/README.md b/Drivers/BSP/STM32469I_EVAL/README.md deleted file mode 100644 index 1f8a4c099b..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# BSP STM32469I-EVAL Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32469i-eval.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32469i-eval** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32469I-EVAL** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32469i-eval/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ft6x06](https://github.com/STMicroelectronics/stm32-ft6x06) -* [stm32-mfxstm32l152](https://github.com/STMicroelectronics/stm32-mfxstm32l152) -* [stm32-n25q512a](https://github.com/STMicroelectronics/stm32-n25q512a) -* [stm32-ov5640](https://github.com/STMicroelectronics/stm32-ov5640) -* [stm32-s25fl512s](https://github.com/STMicroelectronics/stm32-s25fl512s) -* [stm32-s5k5cag](https://github.com/STMicroelectronics/stm32-s5k5cag) -* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32469I_EVAL/Release_Notes.html b/Drivers/BSP/STM32469I_EVAL/Release_Notes.html deleted file mode 100644 index 34acea0ad7..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/Release_Notes.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - Release Notes for STM32469I-EVAL Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32469I-EVAL Board Drivers

-

Copyright © 2015 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32469I-EVAL Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_eval_camera.c/.h: -
      -
    • Support ov5640 camera sensor
    • -
  • -
  • stm32469i_eval.c/.h: -
      -
    • Add OV5640 I2C address
    • -
    • Update CAMERA IO Read/Write to support ov5640 camera sensor
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32469i_eval_audio.c: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • stm32469i_eval_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehavior with SW4STM32 Toolchain
    • -
  • -
-

Backward compatibility

-
    -
  • This version must be used with v3.0.0 of PDM library
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_eval_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm32469i_eval_ts.c/.h: -
      -
    • Support of FT6336G Touch Screen
    • -
  • -
  • stm32469i_eval_qspi.c/.h: -
      -
    • QSPI write operation improvement
    • -
    • Update CS High Time
    • -
  • -
  • stm32469i_eval_sdram.c: -
      -
    • Update SDRAM RowBitsNumbers and ColumnBitsNumber values to address all 32MB memory size.
    • -
  • -
-

Backward compatibility

-
    -
  • These BSP drivers break the compatibility with previous versions.
  • -
-

Dependencies

-
    -
  • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_eval_lcd.c/.h: -
      -
    • Update DSI initialization
    • -
    • Update LTDC clock value
    • -
    • Update LCD_DSI_PIXEL_DATA_FMT_RBG888 and LCD_DSI_PIXEL_DATA_FMT_RBG565 values
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_eval_camera.h update BSP Camera driver to use the new HAL DCMI API’s: -
      -
    • Update BSP_CAMERA_Suspend() API to call HAL_DCMI_Suspend() API
    • -
    • Update BSP_CAMERA_Resume to call HAL_DCMI_Resume() API
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32469I_EVAL_BSP_User_Manual.chm file
  • -
  • stm32469i_eval_audio.c -
      -
    • Alignment with STM32F4xx_HAL_Driver V1.4.4
    • -
  • -
  • stm32469i_eval_qspi.c -
      -
    • Deactivate Timeout in memory mapped mode
    • -
    • Rename BSP_QSPI_MemoryMappedMode() API to BSP_QSPI_EnableMemoryMappedMode() API
    • -
  • -
  • stm32469i_eval_lcd.c -
      -
    • BSP_LCD_InitEx() API updated to remove use of intermediate variable Clockratio and improve calculation granularity
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32469i_eval_lcd.c update: -
      -
    • Add delay within BSP_LCD_Reset() function
    • -
  • -
  • stm32469i_eval_lcd.h update: -
      -
    • Replace “" withâ€/"
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release of the STM32469I-EVAL BSP drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32469I_EVAL/_htmresc/favicon.png b/Drivers/BSP/STM32469I_EVAL/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32469I_EVAL/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32469I_EVAL/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32469I_EVAL/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32469I_EVAL/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32469I_EVAL/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32469I_EVAL/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.c deleted file mode 100644 index b901cb9c79..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.c +++ /dev/null @@ -1,1292 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM32469I-EVAL evaluation - * board(MB1165) RevA/B from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTE - - This driver requires the stm32469i_eval_io to manage the joystick - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" -#if defined(USE_IOEXPANDER) -#include "stm32469i_eval_io.h" -#endif /* USE_IOEXPANDER */ - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32469I_EVAL STM32469I EVAL - * @{ - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL STM32469I EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_TypesDefinitions STM32469I EVAL LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_Defines STM32469I EVAL LOW LEVEL Private Defines - * @{ - */ -/** - * @brief STM32469I EVAL BSP Driver version number V2.1.2 - */ -#define __STM32469I_EVAL_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32469I_EVAL_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32469I_EVAL_BSP_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ -#define __STM32469I_EVAL_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32469I_EVAL_BSP_VERSION ((__STM32469I_EVAL_BSP_VERSION_MAIN << 24)\ - |(__STM32469I_EVAL_BSP_VERSION_SUB1 << 16)\ - |(__STM32469I_EVAL_BSP_VERSION_SUB2 << 8 )\ - |(__STM32469I_EVAL_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_Macros STM32469I EVAL LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_Variables STM32469I EVAL LOW LEVEL Private Variables - * @{ - */ -const uint32_t GPIO_PIN[LEDn] = {LED1_PIN, - LED2_PIN, - LED3_PIN, - LED4_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, - TAMPER_BUTTON_GPIO_PORT, - KEY_BUTTON_GPIO_PORT}; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, - TAMPER_BUTTON_PIN, - KEY_BUTTON_PIN}; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, - TAMPER_BUTTON_EXTI_IRQn, - KEY_BUTTON_EXTI_IRQn}; - -USART_TypeDef* COM_USART[COMn] = {EVAL_COM1}; - -GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT}; - -GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT}; - -const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN}; - -const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN}; - -const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF}; - -const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF}; - -static I2C_HandleTypeDef heval_I2c; - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_FunctionPrototypes STM32469I EVAL LOW LEVEL Private FunctionPrototypes - * @{ - */ -static void I2Cx_MspInit(void); -static void I2Cx_Init(void); -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg); -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); -static void I2Cx_Error(uint8_t Addr); - -/* IOExpander IO functions */ -void IOE_Init(void); -void IOE_ITConfig(void); -void IOE_Delay(uint32_t Delay); -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg); -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); - -#if defined(USE_IOEXPANDER) -/* MFX IO functions */ -void MFX_IO_Init(void); -void MFX_IO_DeInit(void); -void MFX_IO_ITConfig(void); -void MFX_IO_Delay(uint32_t Delay); -void MFX_IO_Write(uint16_t Addr, uint8_t Reg, uint8_t Value); -uint8_t MFX_IO_Read(uint16_t Addr, uint8_t Reg); -uint16_t MFX_IO_ReadMultiple(uint16_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void MFX_IO_Wakeup(void); -void MFX_IO_EnableWakeupPin(void); -#endif /* USE_IOEXPANDER */ - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* CAMERA IO functions */ -void CAMERA_IO_Init(void); -void CAMERA_Delay(uint32_t Delay); -void CAMERA_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t CAMERA_IO_Read(uint8_t Addr, uint16_t Reg); - -/* I2C EEPROM IO function */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/* TouchScreen (TS) IO functions */ -void TS_IO_Init(void); -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_Delay(uint32_t Delay); - -void OTM8009A_IO_Delay(uint32_t Delay); -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_BSP_Public_Functions STM32469I EVAL BSP Public Functions - * @{ - */ - - /** - * @brief This method returns the STM32469I EVAL BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM32469I_EVAL_BSP_VERSION; -} - -/** - * @brief Configures LED GPIO. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ -#if !defined(USE_STM32469I_EVAL_REVA) -/* Eval Rev B and beyond : leds are directly connected to MCU o PK3, 4, 5, 6 */ - GPIO_InitTypeDef gpio_init_structure; - - /* On RevB LED1, LED2, LED3 and LED4 are on GPIO */ - if (Led <= LED4) - { - /* Enable the GPIO_LED clock */ - LEDx_GPIO_CLK_ENABLE(); - - /* Configure the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - HAL_GPIO_Init(LEDx_GPIO_PORT, &gpio_init_structure); - - /* By default, turn off LED by setting a high level on corresponding GPIO */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); - } -#else -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* Initialize the IO functionalities */ - BSP_IO_Init(); - - /* the output mode choices shall be extended to PushPull / PullUp*/ - BSP_IO_ConfigPin(GPIO_PIN[Led], IO_MODE_OUTPUT_PP_PU); - - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_SET); -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ -} - - -/** - * @brief DeInit LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - * @note Led DeInit does not disable the GPIO clock nor disable the Mfx - */ -void BSP_LED_DeInit(Led_TypeDef Led) -{ -#if !defined(USE_STM32469I_EVAL_REVA) -/* Eval Rev B and beyond */ - GPIO_InitTypeDef gpio_init_structure; - - /* On RevB LED1 LED2 LED3 and LED4 are on GPIO PK3, 4, 5, 6 */ - if (Led <= LED4) - { - /* Turn off LED */ - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); - /* DeInit the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - HAL_GPIO_DeInit(LEDx_GPIO_PORT, gpio_init_structure.Pin); - } -#else -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - BSP_IO_ConfigPin(GPIO_PIN[Led], IO_MODE_OFF); -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ -} -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ -#if !defined(USE_STM32469I_EVAL_REVA) - /* Eval Rev B and beyond */ - /* On RevB LED1 LED2 LED3 and LED4 are on GPIO PK3, 4, 5, 6 */ - if (Led <= LED4) - { - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_RESET); - } -#else -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_RESET); -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ - -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ -#if !defined(USE_STM32469I_EVAL_REVA) - /* Eval Rev B and beyond */ - /* On RevB LED1 LED2 LED3 and LED4 are on GPIO PK3, 4, 5, 6 */ - if (Led <= LED4) - { - HAL_GPIO_WritePin(LEDx_GPIO_PORT, GPIO_PIN[Led], GPIO_PIN_SET); - } -#else -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - BSP_IO_WritePin(GPIO_PIN[Led], BSP_IO_PIN_SET); -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ -#if !defined(USE_STM32469I_EVAL_REVA) - /* Eval Rev B and beyond */ - /* On RevB LED1 LED2 LED3 and LED4 are on GPIO PK3, 4, 5, 6 */ - if (Led <= LED4) - { - HAL_GPIO_TogglePin(LEDx_GPIO_PORT, GPIO_PIN[Led]); - } -#else -#if defined(USE_IOEXPANDER) /* (USE_IOEXPANDER always defined for RevA) */ - /* GPIO_PIN[Led] depends on the board revision: */ - /* - in case of RevA all leds are on IOEXPANDER (Mfx) */ - BSP_IO_TogglePin(GPIO_PIN[Led]); -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @param Button_Mode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the BUTTON clock */ - BUTTONx_GPIO_CLK_ENABLE(Button); - - if(Button_Mode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - } - - if(Button_Mode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - - if(Button != BUTTON_WAKEUP) - { - gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; - } - else - { - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - } - - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Push Button DeInit. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @note PB DeInit does not disable the GPIO clock - */ -void BSP_PB_DeInit(Button_TypeDef Button) -{ - GPIO_InitTypeDef gpio_init_structure; - - gpio_init_structure.Pin = BUTTON_PIN[Button]; - HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); -} - - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @retval The Button GPIO pin value - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - -/** - * @brief Configures COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @arg COM2 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIO clock of GPIO port supporting COM_TX and COM_RX pins */ - EVAL_COMx_TX_RX_GPIO_CLK_ENABLE(COM); - - /* Enable USART clock */ - EVAL_COMx_CLK_ENABLE(COM); - - /* Configure USART Tx as alternate function */ - gpio_init_structure.Pin = COM_TX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = COM_TX_AF[COM]; - HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure); - - /* Configure USART Rx as alternate function */ - gpio_init_structure.Pin = COM_RX_PIN[COM]; - HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure); - - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief DeInit COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @arg COM2 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_DeInit(huart); - - /* Enable USART clock */ - EVAL_COMx_CLK_DISABLE(COM); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPOI pins clock, FMC clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} -#if defined(USE_IOEXPANDER) - -/** - * @brief Configures joystick GPIO and EXTI modes. - * @param Joy_Mode: Button mode. - * This parameter can be one of the following values: - * @arg JOY_MODE_GPIO: Joystick pins will be used as simple IOs - * @arg JOY_MODE_EXTI: Joystick pins will be connected to EXTI line - * with interrupt generation capability - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode) -{ - uint8_t ret = 0; - - /* Initialize the IO functionalities */ - ret = BSP_IO_Init(); - - /* Configure joystick pins in IT mode */ - if(Joy_Mode == JOY_MODE_EXTI) - { - /* Configure IO interrupt acquisition mode */ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_IT_LOW_LEVEL_PU); - } - else - { - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_INPUT_PU); - } - - return ret; -} - - -/** - * @brief DeInit joystick GPIOs. - * @note JOY DeInit does not disable the Mfx, just set the Mfx pins in Off mode - */ -void BSP_JOY_DeInit() -{ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_OFF); -} - -/** - * @brief Returns the current joystick status. - * @retval Code of the joystick key pressed - * This code can be one of the following values: - * @arg JOY_NONE - * @arg JOY_SEL - * @arg JOY_DOWN - * @arg JOY_LEFT - * @arg JOY_RIGHT - * @arg JOY_UP - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - uint16_t pin_status = 0; - - /* Read the status joystick pins */ - pin_status = BSP_IO_ReadPin(JOY_ALL_PINS); - - /* Check the pressed keys */ - if((pin_status & JOY_NONE_PIN) == JOY_NONE) - { - return(JOYState_TypeDef) JOY_NONE; - } - else if(!(pin_status & JOY_SEL_PIN)) - { - return(JOYState_TypeDef) JOY_SEL; - } - else if(!(pin_status & JOY_DOWN_PIN)) - { - return(JOYState_TypeDef) JOY_DOWN; - } - else if(!(pin_status & JOY_LEFT_PIN)) - { - return(JOYState_TypeDef) JOY_LEFT; - } - else if(!(pin_status & JOY_RIGHT_PIN)) - { - return(JOYState_TypeDef) JOY_RIGHT; - } - else if(!(pin_status & JOY_UP_PIN)) - { - return(JOYState_TypeDef) JOY_UP; - } - else - { - return(JOYState_TypeDef) JOY_NONE; - } -} -#endif /* USE_IOEXPANDER */ - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Private_Functions STM32469I EVAL LOW LEVEL Private Functions - * @{ - */ - - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes I2C MSP. - */ -static void I2Cx_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = EVAL_I2Cx_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = EVAL_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = EVAL_I2Cx_SDA_PIN; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - EVAL_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - EVAL_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - EVAL_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_EV_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_ER_IRQn, 0x05, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_ER_IRQn); -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2Cx_Init(void) -{ - if(HAL_I2C_GetState(&heval_I2c) == HAL_I2C_STATE_RESET) - { - heval_I2c.Instance = I2C1; - heval_I2c.Init.ClockSpeed = I2C_SCL_FREQ_KHZ; - heval_I2c.Init.DutyCycle = I2C_DUTYCYCLE_2; - heval_I2c.Init.OwnAddress1 = 0; - heval_I2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - heval_I2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; - heval_I2c.Init.OwnAddress2 = 0; - heval_I2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; - heval_I2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; - - /* Init the I2C */ - I2Cx_MspInit(); - HAL_I2C_Init(&heval_I2c); - } -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, - Addr, - (uint16_t)Reg, - I2C_MEMADD_SIZE_8BIT, - &Value, - 1, - 100); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t Value = 0; - - status = HAL_I2C_Mem_Read(&heval_I2c, - Addr, - Reg, - I2C_MEMADD_SIZE_8BIT, - &Value, - 1, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } - return Value; -} - -/** - * @brief Reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress: memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(&heval_I2c, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress: memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, - Addr, - (uint16_t)Reg, - MemAddress, - Buffer, - Length, - 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initiaize the I2C Bus */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(&heval_I2c, DevAddress, Trials, 1000)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param Addr: I2C Address - */ -static void I2Cx_Error(uint8_t Addr) -{ - /* De-initialize the I2C communication bus */ - HAL_I2C_DeInit(&heval_I2c); - - /* Re-Initiaize the I2C communication bus */ - I2Cx_Init(); -} - -/** - * @} - */ - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/********************************* LINK IOE ***********************************/ - -/** - * @brief Initializes IOE low level. - */ -void IOE_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Configures IOE low level interrupt. - */ -void IOE_ITConfig(void) -{ - static uint8_t IOE_IT_Enabled = 0; - /* GPIO_InitTypeDef GPIO_InitStruct; */ - - if(IOE_IT_Enabled == 0) - { - IOE_IT_Enabled = 1; - - /* to be implemented */ - } -} - -/** - * @brief IOE writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief IOE reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief IOE reads multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief IOE writes multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - I2Cx_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief IOE delay - * @param Delay: Delay in ms - */ -void IOE_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -#if defined(USE_IOEXPANDER) - -/********************************* LINK MFX ***********************************/ - -/** - * @brief Initializes MFX low level. - */ -void MFX_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes MFX low level. - */ -void MFX_IO_DeInit(void) -{ -} - -/** - * @brief Configures MFX low level interrupt. - */ -void MFX_IO_ITConfig(void) -{ - static uint8_t MFX_IO_IT_Enabled = 0; - GPIO_InitTypeDef gpio_init_structure; - - if(MFX_IO_IT_Enabled == 0) - { - MFX_IO_IT_Enabled = 1; - /* Enable the GPIO EXTI clock */ - __HAL_RCC_GPIOI_CLK_ENABLE(); - __HAL_RCC_SYSCFG_CLK_ENABLE(); - - gpio_init_structure.Pin = GPIO_PIN_8; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_LOW; - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - HAL_GPIO_Init(GPIOI, &gpio_init_structure); - - /* Enable and set GPIO EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(EXTI9_5_IRQn), 0x0F, 0x0F); - HAL_NVIC_EnableIRQ((IRQn_Type)(EXTI9_5_IRQn)); - } -} - -/** - * @brief MFX writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void MFX_IO_Write(uint16_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write((uint8_t) Addr, Reg, Value); -} - -/** - * @brief MFX reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t MFX_IO_Read(uint16_t Addr, uint8_t Reg) -{ - return I2Cx_Read((uint8_t) Addr, Reg); -} - -/** - * @brief MFX reads multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t MFX_IO_ReadMultiple(uint16_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple((uint8_t)Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief MFX delay - * @param Delay: Delay in ms - */ -void MFX_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @brief Used by Lx family but requested for MXF component compatibility. - */ -void MFX_IO_Wakeup(void) -{ -} - -/** - * @brief Used by Lx family but requested for MXF component compatibility. - */ -void MFX_IO_EnableWakeupPin(void) -{ -} - -#endif /* USE_IOEXPANDER */ - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - - I2Cx_WriteMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - I2Cx_ReadMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - - read_value = tmp; - - return read_value; -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK CAMERA ********************************/ - -/** - * @brief Initializes Camera low level. - */ -void CAMERA_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Camera writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void CAMERA_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - if(Addr == CAMERA_I2C_ADDRESS_2) - { - I2Cx_WriteMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 1); - } - else - { - /* For S5K5CAG sensor, 16 bits accesses are used */ - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - I2Cx_WriteMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); - } -} - -/** - * @brief Camera reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint16_t CAMERA_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - if(Addr == CAMERA_I2C_ADDRESS_2) - { - I2Cx_ReadMultiple(Addr , Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 1); - } - else - { - /* For S5K5CAG sensor, 16 bits accesses are used */ - I2Cx_ReadMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - read_value = tmp; - } - - return read_value; -} - -/** - * @brief Camera delay - * @param Delay: Delay in ms - */ -void CAMERA_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Read data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(DevAddress, Trials)); -} - -/******************************** LINK TS (TouchScreen) *****************************/ - -/** - * @brief Initialize I2C communication - * channel from MCU to TouchScreen (TS). - */ -void TS_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Writes single data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief Reads single data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief Reads multiple data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Writes multiple data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - I2Cx_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Delay function used in TouchScreen low level driver. - * @param Delay: Delay in ms - */ -void TS_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/**************************** LINK OTM8009A (Display driver) ******************/ -/** - * @brief OTM8009A delay - * @param Delay: Delay in ms - */ -void OTM8009A_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.h deleted file mode 100644 index 2fdb072e37..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval.h +++ /dev/null @@ -1,423 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval.h - * @author MCD Application Team - * @brief This file contains definitions for STM32469I-EVAL's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_H -#define __STM32469I_EVAL_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* USE_STM32469I_EVAL_REVA must USE USE_IOEXPANDER */ -#if defined(USE_STM32469I_EVAL_REVA) -#ifndef USE_IOEXPANDER -#define USE_IOEXPANDER -#endif /* USE_IOEXPANDER */ -#endif /* USE_STM32469I_EVAL_REVA */ - - /* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL STM32469I EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Exported_Types STM32469I EVAL LOW LEVEL Exported Types - * @{ - */ - -/** @brief Led_TypeDef - * STM32469I_EVAL board leds definitions. - */ -typedef enum -{ - LED1 = 0, - LED_GREEN = LED1, - LED2 = 1, - LED_ORANGE = LED2, - LED3 = 2, - LED_RED = LED3, - LED4 = 3, - LED_BLUE = LED4 - -} Led_TypeDef; - -/** @brief Button_TypeDef - * STM32469I_EVAL board Buttons definitions. - */ -typedef enum -{ - BUTTON_WAKEUP = 0, - BUTTON_TAMPER = 1, - BUTTON_KEY = 2 - -} Button_TypeDef; - -/** @brief ButtonMode_TypeDef - * STM32469I_EVAL board Buttons Modes definitions. - */ -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 - -} ButtonMode_TypeDef; - -#if defined(USE_IOEXPANDER) -/** @brief JOYMode_TypeDef - * STM32469I_EVAL board Joystick Mode definitions. - */ -typedef enum -{ - JOY_MODE_GPIO = 0, - JOY_MODE_EXTI = 1 - -} JOYMode_TypeDef; - -/** @brief JOYState_TypeDef - * STM32469I_EVAL board Joystick State definitions. - */ -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 - -} JOYState_TypeDef; -#endif /* USE_IOEXPANDER */ - -/** @brief COM_TypeDef - * STM32469I_EVAL board COM ports. - */ -typedef enum -{ - COM1 = 0, - COM2 = 1 - -} COM_TypeDef; - -/** @brief EVAL_Status_TypeDef - * STM32469I_EVAL board Eval Status return possible values. - */ -typedef enum -{ - EVAL_OK = 0, - EVAL_ERROR = 1 - -} EVAL_Status_TypeDef; - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Exported_Constants STM32469I EVAL LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32469I_EVAL board - */ -#if !defined (USE_STM32469I_EVAL) - #define USE_STM32469I_EVAL -#endif - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_LED STM32469I EVAL LOW LEVEL LED - * @{ - */ -/* Always four leds for all revisions of Eval boards */ -#define LEDn ((uint8_t)4) - -#if !defined(USE_STM32469I_EVAL_REVA) -/* Rev B board and beyond : 4 Leds are connected to MCU directly and not via MFX */ -/* PK3, PK4, PK5, PK6 are used */ -#define LEDx_GPIO_PORT GPIOK -#define LEDx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOK_CLK_ENABLE() -#define LEDx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOK_CLK_DISABLE() -#define LED1_PIN GPIO_PIN_3 -#define LED2_PIN GPIO_PIN_4 -#define LED3_PIN GPIO_PIN_5 -#define LED4_PIN GPIO_PIN_6 -#else -/* Eval Rev A board */ -#define LED1_PIN IO_PIN_16 -#define LED2_PIN IO_PIN_17 -#define LED3_PIN IO_PIN_18 -#define LED4_PIN IO_PIN_19 -#endif /* USE_STM32469I_EVAL_REVA */ -/** - * @} - */ - -/** - * @brief MFX_IRQOUt pin - */ -#define MFX_IRQOUT_PIN GPIO_PIN_8 -#define MFX_IRQOUT_GPIO_PORT GPIOI -#define MFX_IRQOUT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() -#define MFX_IRQOUT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() -#define MFX_IRQOUT_EXTI_IRQn EXTI9_5_IRQn -#define MFX_IRQOUT_EXTI_IRQnHandler EXTI9_5_IRQHandler - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_BUTTON STM32469I EVAL LOW LEVEL BUTTON - * @{ - */ -/* Joystick pins are connected to IO Expander (accessible through I2C1 interface) */ -#define BUTTONn ((uint8_t)3) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -/** - * @brief Tamper push-button - */ -#define TAMPER_BUTTON_PIN GPIO_PIN_13 -#define TAMPER_BUTTON_GPIO_PORT GPIOC -#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Key push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_13 -#define KEY_BUTTON_GPIO_PORT GPIOC -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {WAKEUP_BUTTON_GPIO_CLK_ENABLE();} else\ - if((__INDEX__) == 1) {TAMPER_BUTTON_GPIO_CLK_ENABLE();} else\ - {KEY_BUTTON_GPIO_CLK_ENABLE(); }} while(0) - -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\ - ((__INDEX__) == 1) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() : KEY_BUTTON_GPIO_CLK_DISABLE()) -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_COM STM32469I EVAL LOW LEVEL COM - * @{ - */ -#define COMn ((uint8_t)1) - -/** - * @brief Definition for COM port1, connected to USART1 - */ -#define EVAL_COM1 USART1 -#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() -#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE() - -#define EVAL_COM1_TX_PIN GPIO_PIN_9 -#define EVAL_COM1_RX_PIN GPIO_PIN_10 -#define EVAL_COM1_TX_GPIO_PORT GPIOA -#define EVAL_COM1_RX_GPIO_PORT EVAL_COM1_TX_GPIO_PORT - -#define EVAL_COM1_TX_AF GPIO_AF7_USART1 -#define EVAL_COM1_RX_AF EVAL_COM1_TX_AF - -#define EVAL_COM1_TX_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define EVAL_COM1_TX_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() - -#define EVAL_COM1_IRQn USART1_IRQn - -#define EVAL_COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {EVAL_COM1_CLK_ENABLE();} } while(0) -#define EVAL_COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? EVAL_COM1_CLK_DISABLE() : 0) - -#define EVAL_COMx_TX_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {EVAL_COM1_TX_RX_GPIO_CLK_ENABLE();} } while(0) -#define EVAL_COMx_TX_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? EVAL_COM1_TX_RX_GPIO_CLK_DISABLE() : 0) - -/** - * @brief Joystick Pins definition - */ -#if defined(USE_IOEXPANDER) -#define JOY_SEL_PIN IO_PIN_0 -#define JOY_DOWN_PIN IO_PIN_1 -#define JOY_LEFT_PIN IO_PIN_2 -#define JOY_RIGHT_PIN IO_PIN_3 -#define JOY_UP_PIN IO_PIN_4 -#define JOY_NONE_PIN JOY_ALL_PINS -#define JOY_ALL_PINS (IO_PIN_0 | IO_PIN_1 | IO_PIN_2 | IO_PIN_3 | IO_PIN_4) -#endif /* USE_IOEXPANDER */ - -/** - * @brief Eval Pins definition - */ -#if defined(USE_IOEXPANDER) -#define XSDN_PIN IO_PIN_10 -#define MII_INT_PIN IO_PIN_13 -#define RSTI_PIN IO_PIN_11 -#define CAM_PLUG_PIN IO_PIN_12 -#define TS_INT_PIN IO_PIN_14 -#define AUDIO_INT_PIN IO_PIN_5 -#define OTG_FS1_OVER_CURRENT_PIN IO_PIN_6 -#define OTG_FS1_POWER_SWITCH_PIN IO_PIN_7 -#define OTG_FS2_OVER_CURRENT_PIN IO_PIN_8 -#define OTG_FS2_POWER_SWITCH_PIN IO_PIN_9 -#define SD_DETECT_PIN IO_PIN_15 -#endif /* USE_IOEXPANDER */ - -/* Exported constant IO ------------------------------------------------------*/ - -/** - * @brief TouchScreen FT6206 Slave I2C address 1 - */ -#define TS_I2C_ADDRESS ((uint16_t)0x54) - -/** - * @brief TouchScreen FT6336G Slave I2C address 2 - */ -#define TS_I2C_ADDRESS_A02 ((uint16_t)0x70) - -/** - * @brief MFX_I2C_ADDR 0 - */ -#define IO_I2C_ADDRESS ((uint16_t)0x84) - -/** - * @brief Camera I2C Slave address - */ -#define CAMERA_I2C_ADDRESS ((uint16_t)0x5A) -#define CAMERA_I2C_ADDRESS_2 ((uint16_t)0x78) - -/** - * @brief Audio I2C Slave address - */ -#define AUDIO_I2C_ADDRESS ((uint16_t)0x34) - -/** - * @brief EEPROM I2C Slave address 1 - */ -#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) - -/** - * @brief EEPROM I2C Slave address 2 - */ -#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) - -/** - * @brief I2C clock speed configuration (in Hz) - * WARNING: - * Make sure that this define is not already declared in other files - * It can be used in parallel by other modules. - */ -#ifndef I2C_SCL_FREQ_KHZ -#define I2C_SCL_FREQ_KHZ 400000 /*!< f(I2C_SCL) = 400 kHz */ -#endif /* I2C_SCL_FREQ_KHZ */ - -/** - * @brief User can use this section to tailor I2Cx/I2Cx instance used and associated - * resources. - * Definition for I2Cx clock resources - */ -#define EVAL_I2Cx I2C1 -#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define EVAL_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define EVAL_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define EVAL_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/** @brief Definition for I2Cx Pins - */ -#define EVAL_I2Cx_SCL_PIN GPIO_PIN_8 /*!< PB8 */ -#define EVAL_I2Cx_SCL_SDA_GPIO_PORT GPIOB -#define EVAL_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1 -#define EVAL_I2Cx_SDA_PIN GPIO_PIN_9 /*!< PB9 */ - -/** @brief Definition of I2C interrupt requests - */ -#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn -#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Exported_Macros STM32469I EVAL LOW LEVEL Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_LOW_LEVEL_Exported_Functions STM32469I EVAL LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart); -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart); -#if defined(USE_IOEXPANDER) -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode); -void BSP_JOY_DeInit(void); -JOYState_TypeDef BSP_JOY_GetState(void); -#endif /* USE_IOEXPANDER */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.c deleted file mode 100644 index 32ffe3514b..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.c +++ /dev/null @@ -1,1306 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM32469I-EVAL (MB1165) Evaluation boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_HEADPHONE1, - OUTPUT_DEVICE_HEADPHONE2 or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, SAI, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec or the MFX has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_HEADPHONE1 : only headphones 1 will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE2 : only headphones 2 will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Headphones are used as outputs for the audio stream - at the same time. - Note. On STM32469I-EVAL SAI_DMA is configured in CIRCULAR mode. Due to this the application - does NOT need to call BSP_AUDIO_OUT_ChangeBuffer() to assure streaming. - + Call the function BSP_EVAL_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm32469i_eval_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, the audio frame slot, - the device output mode the mute or the stop, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetAudioFrameSlot(), BSP_AUDIO_OUT_SetOutputMode(), - BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the stm32469i_eval_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm32469i_eval_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32469i_eval_audio_codec.c file (I2Sx_Init(), I2Sx_DeInit(), SAIx_Init() and SAIx_DeInit()) - -Known Limitations: ------------------- - 1- If the TDM Format used to paly in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_AUDIO STM32469I EVAL AUDIO - * @brief This file includes the low layer driver for wm8994 Audio Codec - * available on STM32469I-EVAL evaluation board(MB1165). - * @{ - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Private_Types STM32469I EVAL AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Private_Defines STM32469I EVAL AUDIO Private Defines - * @brief Headphone1 (CN27 of STM32469I-EVAL board) is connected to the - * HEADPHONE output of wm8994 Audio Codec. - * Headphone2 (CN26 of STM32469I-EVAL board) is connected to the - * SPEAKER output of wm8994 Audio Codec. - * @{ - */ -#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE -#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 codec */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Private_Macros STM32469I EVAL AUDIO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Private_Variables STM32469I EVAL AUDIO Private Variables - * @{ - */ - -/* -Note: - these global variables are not compliant to naming rules (upper case without "_" ), - but we keep this naming for compatibility, in fact these variables (not static) - could have been used by the application, example the stm32f4xx_it.c: - void DMA2_Stream6_IRQHandler(void) - { HAL_DMA_IRQHandler(haudio_out_sai.hdmatx); } -*/ -AUDIO_DrvTypeDef *audio_drv; -SAI_HandleTypeDef haudio_out_sai; -I2S_HandleTypeDef haudio_in_i2s; -TIM_HandleTypeDef haudio_tim; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -uint8_t Channel_Demux[128] = { - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f -}; - -uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Private_Function_Prototypes STM32469I EVAL AUDIO Private Function Prototypes - * @{ - */ -static void SAIx_Init(uint32_t AudioFreq); -static void SAIx_DeInit(void); -static void I2Sx_Init(uint32_t AudioFreq); -static void I2Sx_DeInit(void); -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim); -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim); -static void TIMx_Init(void); -static void TIMx_DeInit(void); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_out_Private_Functions STM32469I EVAL AUDIO out Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_HEADPHONE1, OUTPUT_DEVICE_HEADPHONE2, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The I2S PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - uint32_t deviceid = 0x00; - - SAIx_DeInit(); - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* SAI data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to SAI peripheral */ - haudio_out_sai.Instance = AUDIO_SAIx; - if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET) - { - /* Init the SAI MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL); - } - SAIx_Init(AudioFreq); - - /* wm8994 codec initialization */ - deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS); - - if((deviceid) == WM8994_ID) - { - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Resets the audio codec. */ - audio_drv->Reset(AUDIO_I2C_ADDRESS); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pBuffer, DMA_MAX(Size / AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the SAI interface. - * @param pData: pointer on data address - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * @warning When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_SAI_DMAPause(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief This function Resumes the audio file stream. - * @warning When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause/resume function */ - HAL_SAI_DMAResume(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_SAI_DMAStop(&haudio_out_sai); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(1); - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_HEADPHONE1, - * OUTPUT_DEVICE_HEADPHONE2 or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frequency configuration */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Updates the Audio frame slot configuration. - * @param AudioFrameSlot: specifies the audio Frame slot - * This parameter can be any value of @ref CODEC_AudioFrame_SLOT_TDMMode - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frame slot. - */ -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot) -{ - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.SlotInit.SlotActive = AudioFrameSlot; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinit the audio peripherals. - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - SAIx_DeInit(); - /* DeInit the SAI MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_OUT_MspDeInit(&haudio_out_sai, NULL); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_eval_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_eval_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief SAI error callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) -{ - static DMA_HandleTypeDef hdma_sai_tx; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable SAI clock */ - AUDIO_SAIx_CLK_ENABLE(); - - /* Enable GPIO clock */ - AUDIO_SAIx_MCLK_ENABLE(); - AUDIO_SAIx_SCK_SD_FS_ENABLE(); - - /* CODEC_SAI pins configuration: MCK pin -----------------------------------*/ - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SCK_SD_FS_AF; - HAL_GPIO_Init(AUDIO_SAIx_MCLK_GPIO_PORT, &gpio_init_structure); - - /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_SAIx_MCLK_SCK_SD_FS_AF; - HAL_GPIO_Init(AUDIO_SAIx_SCK_SD_FS_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_SAIx_DMAx_CLK_ENABLE(); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Configure the hdma_saiTx handle parameters */ - hdma_sai_tx.Init.Channel = AUDIO_SAIx_DMAx_CHANNEL; - hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE; - hdma_sai_tx.Init.MemDataAlignment = AUDIO_SAIx_DMAx_MEM_DATA_SIZE; - hdma_sai_tx.Init.Mode = DMA_CIRCULAR; - hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_sai_tx.Instance = AUDIO_SAIx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_sai_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_sai_tx); - } - - /* SAI DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_SAIx_DMAx_IRQ); -} -/** - * @brief Deinitializes BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* SAI DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_SAIx_DMAx_IRQ); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hsai->hdmatx); - } - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(hsai); - - /* Deactives CODEC_SAI pins FS, SCK, MCK and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_SAIx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_MCLK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_SCK_SD_FS_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable SAI clock */ - AUDIO_SAIx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hsai: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - /* PLLI2S_VCO: VCO_429M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 429/2 = 214.5 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVQ = 214.5/19 = 11.289 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 429; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 2; - rcc_ex_clk_init_struct.PLLI2SDivQ = 19; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */ - { - /* SAI clock config - PLLSAI_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 344/7 = 49.142 Mhz - I2S_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 7; - rcc_ex_clk_init_struct.PLLI2SDivQ = 1; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (SAI). - * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. - * @note The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 - * and user can update this configuration using - */ -static void SAIx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_out_sai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Configure SAI_Block_x - LSBFirst: Disabled - DataSize: 16 */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - haudio_out_sai.Init.ClockSource = SAI_CLKSOURCE_PLLI2S; - haudio_out_sai.Init.AudioMode = SAI_MODEMASTER_TX; - haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE; - haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL; - haudio_out_sai.Init.DataSize = SAI_DATASIZE_16; - haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB; - haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; - haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS; - haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLE; - haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF; - - /* Configure SAI_Block_x Frame - Frame Length: 64 - Frame active Length: 32 - FS Definition: Start frame + Channel Side identification - FS Polarity: FS active Low - FS Offset: FS asserted one bit before the first bit of slot 0 */ - haudio_out_sai.FrameInit.FrameLength = 64; - haudio_out_sai.FrameInit.ActiveFrameLength = 32; - haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; - haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; - haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; - - /* Configure SAI Block_x Slot - Slot First Bit Offset: 0 - Slot Size : 16 - Slot Number: 4 - Slot Active: All slot actives */ - haudio_out_sai.SlotInit.FirstBitOffset = 0; - haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE; - haudio_out_sai.SlotInit.SlotNumber = 4; - haudio_out_sai.SlotInit.SlotActive = CODEC_AUDIOFRAME_SLOT_0123; - - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (SAI). - */ -static void SAIx_DeInit(void) -{ - /* Initialize the hAudioOutSai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - HAL_SAI_DeInit(&haudio_out_sai); -} - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_in_Exported_Functions STM32469I EVAL AUDIO IN Exported functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - I2Sx_DeInit(); - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 384; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Configure the PDM library */ - PDMDecoder_Init(AudioFreq, ChnlNbr, ChnlNbr); - - /* Configure the I2S peripheral */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - if(HAL_I2S_GetState(&haudio_in_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&haudio_in_i2s, NULL); - } - I2Sx_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&haudio_in_i2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* TIMx Peripheral clock disable */ - AUDIO_TIMx_CLK_DISABLE(); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Deinit the audio IN peripherals. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - I2Sx_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_IN_MspDeInit(&haudio_in_i2s, NULL); - TIMx_DeInit(); -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf) -{ - uint8_t app_pdm[INTERNAL_BUFF_SIZE*2]; - uint8_t byte1 = 0, byte2 = 0; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; index> 8)& 0xFF; - byte1 = (PDMBuf[index] & 0xFF); - app_pdm[(index*2)+1] = Channel_Demux[byte1 & CHANNEL_DEMUX_MASK] | Channel_Demux[byte2 & CHANNEL_DEMUX_MASK] << 4; - app_pdm[(index*2)] = Channel_Demux[(byte1 >> 1) & CHANNEL_DEMUX_MASK] | Channel_Demux[(byte2 >> 1) & CHANNEL_DEMUX_MASK] << 4; - } - - for(index = 0; index < DEFAULT_AUDIO_IN_CHANNEL_NBR; index++) - { - /* PDM to PCM filter */ - PDM_Filter((uint8_t*)&app_pdm[index], (uint16_t*)&(PCMBuf[index]), &PDM_FilterHandler[index]); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - - /** - * @brief Rx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Rx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32469i_eval_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32469i_eval_audio.h) */ - BSP_AUDIO_IN_Error_Callback(); -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/** - * @brief BSP AUDIO IN MSP Init. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2s_rx; - GPIO_InitTypeDef gpio_init_structure; - - /* Configure the Timer which clocks the MEMS */ - /* Moved inside MSP to allow applic to redefine the TIMx_MspInit */ - TIMx_Init(); - - /* Enable I2S clock */ - AUDIO_I2Sx_CLK_ENABLE(); - - /* Enable SCK and SD GPIO clock */ - AUDIO_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE(); - /* CODEC_I2S pins configuration: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - gpio_init_structure.Alternate = AUDIO_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_rx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL; - hdma_i2s_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_rx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_rx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_rx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_rx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_rx.Instance = AUDIO_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2s_rx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_rx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through dedicated PLLI2S_R) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_in_i2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* I2S2 peripheral configuration */ - haudio_in_i2s.Init.AudioFreq = 4 * AudioFreq; - haudio_in_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_in_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - haudio_in_i2s.Init.Mode = I2S_MODE_MASTER_RX; - haudio_in_i2s.Init.Standard = I2S_STANDARD_LSB; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_in_i2s); - - /* Disable I2S block */ - __HAL_I2S_ENABLE(&haudio_in_i2s); - -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2s); -} - - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable peripherals and GPIO Clocks --------------------------------------*/ - /* TIMx Peripheral clock enable */ - AUDIO_TIMx_CLK_ENABLE(); - - /* Enable GPIO Channels Clock */ - AUDIO_TIMx_GPIO_CLK_ENABLE(); - - /* Configure I/Os ----------------------------------------------------------*/ - /* Common configuration for all channels */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = AUDIO_TIMx_AF; - - /* Configure TIM input channel */ - gpio_init_structure.Pin = AUDIO_TIMx_IN_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); - - /* Configure TIM output channel */ - gpio_init_structure.Pin = AUDIO_TIMx_OUT_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO_PORT, &gpio_init_structure); - -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Disable TIMx Peripheral clock */ - AUDIO_TIMx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_Init(void) -{ - TIM_IC_InitTypeDef s_ic_config; - TIM_OC_InitTypeDef s_oc_config; - TIM_ClockConfigTypeDef s_clk_source_config; - TIM_SlaveConfigTypeDef s_slave_config; - - /* Configure the TIM peripheral --------------------------------------------*/ - /* Set TIMx instance */ - haudio_tim.Instance = AUDIO_TIMx; - /* Timer Input Capture Configuration Structure declaration */ - /* Initialize TIMx peripheral as follow: - + Period = 0xFFFF - + Prescaler = 0 - + ClockDivision = 0 - + Counter direction = Up - */ - haudio_tim.Init.Period = 1; - haudio_tim.Init.Prescaler = 0; - haudio_tim.Init.ClockDivision = 0; - haudio_tim.Init.CounterMode = TIM_COUNTERMODE_UP; - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspInit(&haudio_tim); - HAL_TIM_IC_Init(&haudio_tim); - - /* Configure the Input Capture channel -------------------------------------*/ - /* Configure the Input Capture of channel 2 */ - s_ic_config.ICPolarity = TIM_ICPOLARITY_FALLING; - s_ic_config.ICSelection = TIM_ICSELECTION_DIRECTTI; - s_ic_config.ICPrescaler = TIM_ICPSC_DIV1; - s_ic_config.ICFilter = 0; - HAL_TIM_IC_ConfigChannel(&haudio_tim, &s_ic_config, AUDIO_TIMx_IN_CHANNEL); - - /* Select external clock mode 1 */ - s_clk_source_config.ClockSource = TIM_CLOCKSOURCE_ETRMODE1; - s_clk_source_config.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED; - s_clk_source_config.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_clk_source_config.ClockFilter = 0; - HAL_TIM_ConfigClockSource(&haudio_tim, &s_clk_source_config); - - /* Select Input Channel as input trigger */ - s_slave_config.InputTrigger = TIM_TS_TI1FP1; - s_slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; - s_slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED; - s_slave_config.TriggerPrescaler = TIM_CLOCKPRESCALER_DIV1; - s_slave_config.TriggerFilter = 0; - HAL_TIM_SlaveConfigSynchronization(&haudio_tim, &s_slave_config); - - /* Output Compare PWM Mode configuration: Channel2 */ - s_oc_config.OCMode = TIM_OCMODE_PWM1; - s_oc_config.OCIdleState = TIM_OCIDLESTATE_SET; - s_oc_config.Pulse = 1; - s_oc_config.OCPolarity = TIM_OCPOLARITY_HIGH; - s_oc_config.OCNPolarity = TIM_OCNPOLARITY_HIGH; - s_oc_config.OCFastMode = TIM_OCFAST_DISABLE; - s_oc_config.OCNIdleState = TIM_OCNIDLESTATE_SET; - - /* Initialize the TIM3 Channel2 with the structure above */ - HAL_TIM_PWM_ConfigChannel(&haudio_tim, &s_oc_config, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel2 */ - HAL_TIM_PWM_Start(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel1 */ - HAL_TIM_IC_Start(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_DeInit(void) -{ - haudio_tim.Instance = AUDIO_TIMx; - - /* Stop the TIM3 Channel2 */ - HAL_TIM_PWM_Stop(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - /* Stop the TIM3 Channel1 */ - HAL_TIM_IC_Stop(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); - - HAL_TIM_IC_DeInit(&haudio_tim); - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspDeInit(&haudio_tim); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.h deleted file mode 100644 index e0fe44ba06..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_audio.h +++ /dev/null @@ -1,302 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_AUDIO_H -#define __STM32469I_EVAL_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/wm8994/wm8994.h" -#include "stm32469i_eval.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I-EVAL_AUDIO - * @{ - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Exported_Types STM32469I EVAL AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Exported_Constants STM32469I EVAL AUDIO Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - USER SAI defines parameters - -----------------------------------------------------------------------------*/ -/** @defgroup CODEC_AudioFrame_SLOT_TDMMode STM32469I EVAL Audio Slot TDM mode - * @brief In W8994 codec the Audio frame contains 4 slots : TDM Mode - * TDM format : - * +------------------|------------------|--------------------|-------------------+ - * | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right | - * +------------------------------------------------------------------------------+ - * @{ - */ -/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */ -#define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3 -/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2 -/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3 -/** - * @} - */ - -/* SAI peripheral configuration defines */ -#define AUDIO_SAIx SAI1_Block_A -#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE() -#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE() -#define AUDIO_SAIx_MCLK_SCK_SD_FS_AF GPIO_AF6_SAI1 - -#define AUDIO_SAIx_MCLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define AUDIO_SAIx_MCLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define AUDIO_SAIx_MCK_PIN GPIO_PIN_7 -#define AUDIO_SAIx_MCLK_GPIO_PORT GPIOG - -#define AUDIO_SAIx_SCK_SD_FS_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define AUDIO_SAIx_SCK_SD_FS_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() -#define AUDIO_SAIx_FS_PIN GPIO_PIN_4 -#define AUDIO_SAIx_SCK_PIN GPIO_PIN_5 -#define AUDIO_SAIx_SD_PIN GPIO_PIN_6 -#define AUDIO_SAIx_SCK_SD_FS_GPIO_PORT GPIOE - - -/* SAI DMA Stream definitions */ -#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_SAIx_DMAx_CLK_DISABLE() __HAL_RCC_DMA2_CLK_DISABLE() -#define AUDIO_SAIx_DMAx_STREAM DMA2_Stream3 -#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream3_IRQn -#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream3_IRQHandler - -/* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 5 /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_I2Sx SPI3 -#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_3 -#define AUDIO_I2Sx_SCK_GPIO_PORT GPIOB -#define AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_AF GPIO_AF6_SPI3 - -#define AUDIO_I2Sx_SD_PIN GPIO_PIN_6 -#define AUDIO_I2Sx_SD_GPIO_PORT GPIOD -#define AUDIO_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define AUDIO_I2Sx_SD_AF GPIO_AF5_I2S3ext - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream2 -#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream2_IRQn -#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream2_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO ((uint32_t)6) /* Select the preemption priority level(0 is the highest) */ - - -/* Two channels are used: - - one channel as input which is connected to I2S SCK in stereo mode - - one channel as output which divides the frequency on the input -*/ - -#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM3_CLK_ENABLE() -#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM3_CLK_DISABLE() -#define AUDIO_TIMx TIM3 -#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 -#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ -#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_TIMx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define AUDIO_TIMx_GPIO_PORT GPIOC -#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_6 -#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_7 -#define AUDIO_TIMx_AF GPIO_AF2_TIM3 - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK ((uint8_t)0) -#define AUDIO_ERROR ((uint8_t)1) -#define AUDIO_TIMEOUT ((uint8_t)2) - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE (128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR) -/* PCM buffer output size */ -#define PCM_OUT_SIZE (DEFAULT_AUDIO_IN_FREQ/1000*DEFAULT_AUDIO_IN_CHANNEL_NBR) -#define CHANNEL_DEMUX_MASK ((uint8_t)0x55) - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/* Delay for the Codec to be correctly reset */ -#define CODEC_RESET_DELAY ((uint8_t)5) - -/*------------------------------------------------------------------------------ - OUTPUT DEVICES definition -------------------------------------------------------------------------------*/ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Exported_Variables STM32469I EVAL AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_Exported_Macros STM32469I EVAL AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_OUT_Exported_Functions STM32469I EVAL AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); -void BSP_AUDIO_OUT_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params); -void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params); - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_AUDIO_IN_Exported_Functions STM32469I EVAL AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -void BSP_AUDIO_IN_DeInit(void); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_AUDIO_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.c deleted file mode 100644 index 3cecae40b2..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.c +++ /dev/null @@ -1,676 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_camera.c - * @author MCD Application Team - * @brief This file includes the driver for Camera modules mounted on - * STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How to use this driver: --------------------------- - - This driver is used to drive the camera. - - The S5K5CAG component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the camera using the BSP_CAMERA_Init() function. - o Start the camera capture/snapshot using the CAMERA_Start() function. - o Suspend, resume or stop the camera capture using the following functions: - - BSP_CAMERA_Suspend() - - BSP_CAMERA_Resume() - - BSP_CAMERA_Stop() - - + Options - o Increase or decrease on the fly the brightness and/or contrast - using the following function: - - BSP_CAMERA_ContrastBrightnessConfig - o Add a special effect on the fly using the following functions: - - BSP_CAMERA_BlackWhiteConfig() - - BSP_CAMERA_ColorEffectConfig() - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_CAMERA STM32469I EVAL CAMERA - * @{ - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Private_TypesDefinitions STM32469I EVAL CAMERA Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Private_Defines STM32469I EVAL CAMERA Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Private_Macros STM32469I EVAL CAMERA Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Imported_Variables STM32469I EVAL CAMERA Imported Variables - * @{ - */ -/** - * @brief DMA2D handle variable - */ -extern DMA2D_HandleTypeDef hdma2d_eval; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Private_Variables STM32469I EVAL CAMERA Private Variables - * @{ - */ -static DCMI_HandleTypeDef hDcmiEval; -CAMERA_DrvTypeDef *CameraDrv; - -/* Camera current resolution naming (QQVGA, VGA, ...) */ -uint32_t CameraCurrentResolution; - -/* Camera image rotation on LCD Displayed frame buffer */ -uint32_t CameraRotation = CAMERA_ROTATION_INVALID; - -static uint32_t CameraHwAddress; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Private_FunctionPrototypes STM32469I EVAL CAMERA Private FunctionPrototypes - * @{ - */ -static uint32_t GetSize(uint32_t Resolution); -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Public_Functions STM32469I EVAL CAMERA Public Functions - * @{ - */ - -/** - * @brief Set Camera image rotation on LCD Displayed frame buffer. - * @param rotation : uint32_t rotation of camera image in preview buffer sent to LCD - * need to be of type Camera_ImageRotationTypeDef - * @retval Camera status - */ -uint8_t BSP_CAMERA_SetRotation(uint32_t rotation) -{ - uint8_t status = CAMERA_ERROR; - - if(rotation < CAMERA_ROTATION_INVALID) - { - /* Set Camera image rotation on LCD Displayed frame buffer */ - CameraRotation = rotation; - status = CAMERA_OK; - } - - return status; -} - -/** - * @brief Get Camera image rotation on LCD Displayed frame buffer. - * @retval rotation : uint32_t value of type Camera_ImageRotationTypeDef - */ -uint32_t BSP_CAMERA_GetRotation(void) -{ - return(CameraRotation); -} - -/** - * @brief Initializes the camera. - * @param Resolution : camera sensor requested resolution (x, y) : standard resolution - * naming QQVGA, QVGA, VGA ... - * @retval Camera status - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution) -{ - DCMI_HandleTypeDef *phdcmi; - uint8_t status = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hDcmiEval; - - /*** Configures the DCMI to interface with the camera module ***/ - /* DCMI configuration */ - phdcmi->Init.CaptureRate = DCMI_CR_ALL_FRAME; - phdcmi->Init.HSPolarity = DCMI_HSPOLARITY_HIGH; - phdcmi->Init.SynchroMode = DCMI_SYNCHRO_HARDWARE; - phdcmi->Init.VSPolarity = DCMI_VSPOLARITY_HIGH; - phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B; - phdcmi->Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; - - phdcmi->Instance = DCMI; - - /* Configure IO functionalities for CAMERA detect pin */ - BSP_IO_Init(); - /* Apply Camera Module hardware reset */ - BSP_CAMERA_HwReset(); - - /* Check if the CAMERA Module is plugged on board */ - if(BSP_IO_ReadPin(CAM_PLUG_PIN) == BSP_IO_PIN_SET) - { - status = CAMERA_NOT_DETECTED; - return status; /* Exit with error */ - } - - /* Read ID of Camera module via I2C */ - if (s5k5cag_ReadID(CAMERA_I2C_ADDRESS) == S5K5CAG_ID) - { - /* Initialize the camera driver structure */ - CameraDrv = &s5k5cag_drv; - CameraHwAddress = CAMERA_I2C_ADDRESS; - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(&hDcmiEval, NULL); - HAL_DCMI_Init(phdcmi); - - /* Camera Module Initialization via I2C to the wanted 'Resolution' */ - CameraDrv->Init(CameraHwAddress, Resolution); - - CameraCurrentResolution = Resolution; - - /* Return CAMERA_OK status */ - status = CAMERA_OK; - } - else if(ov5640_ReadID(CAMERA_I2C_ADDRESS_2) == OV5640_ID) - { - /* Initialize the camera driver structure */ - CameraDrv = &ov5640_drv; - CameraHwAddress = CAMERA_I2C_ADDRESS_2; - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(&hDcmiEval, NULL); - HAL_DCMI_Init(phdcmi); - - /* Camera Module Initialization via I2C to the wanted 'Resolution' */ - CameraDrv->Init(CameraHwAddress, Resolution); - - CameraCurrentResolution = Resolution; - - /* Return CAMERA_OK status */ - status = CAMERA_OK; - } - else - { - /* Return CAMERA_NOT_SUPPORTED status */ - status = CAMERA_NOT_SUPPORTED; - } - - return status; -} - - -/** - * @brief DeInitializes the camera. - * @retval Camera status - */ -uint8_t BSP_CAMERA_DeInit(void) -{ - hDcmiEval.Instance = DCMI; - - HAL_DCMI_DeInit(&hDcmiEval); - BSP_CAMERA_MspDeInit(&hDcmiEval, NULL); - return CAMERA_OK; -} - -/** - * @brief Starts the camera capture in continuous mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_ContinuousStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hDcmiEval, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(CameraCurrentResolution)); -} - -/** - * @brief Starts the camera capture in snapshot mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_SnapshotStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hDcmiEval, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(CameraCurrentResolution)); -} - -/** - * @brief Suspend the CAMERA capture - */ -void BSP_CAMERA_Suspend(void) -{ - /* Suspend the Camera Capture */ - HAL_DCMI_Suspend(&hDcmiEval); -} - -/** - * @brief Resume the CAMERA capture - */ -void BSP_CAMERA_Resume(void) -{ - /* Start the Camera Capture */ - HAL_DCMI_Resume(&hDcmiEval); -} - -/** - * @brief Stop the CAMERA capture - * @retval Camera status - */ -uint8_t BSP_CAMERA_Stop(void) -{ - uint8_t status = CAMERA_ERROR; - - if(HAL_DCMI_Stop(&hDcmiEval) == HAL_OK) - { - status = CAMERA_OK; - } - - /* Set Camera in Power Down */ - BSP_CAMERA_PwrDown(); - - return status; -} - -/** - * @brief CANERA hardware reset - */ -void BSP_CAMERA_HwReset(void) -{ - /* Camera sensor RESET sequence */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - - /* Assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_SET); - - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); - - HAL_Delay(100); /* RST and XSDN signals asserted during 100ms */ - - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - - HAL_Delay(3); /* RST de-asserted and XSDN asserted during 3ms */ - - /* De-assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_SET); - - HAL_Delay(6); /* RST de-asserted during 3ms */ -} - -/** - * @brief CAMERA power down - */ -void BSP_CAMERA_PwrDown(void) -{ - /* Camera power down sequence */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); -} - -/** - * @brief Configures the camera contrast and brightness. - * @param contrast_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_CONTRAST_LEVEL4: for contrast +2 - * @arg CAMERA_CONTRAST_LEVEL3: for contrast +1 - * @arg CAMERA_CONTRAST_LEVEL2: for contrast 0 - * @arg CAMERA_CONTRAST_LEVEL1: for contrast -1 - * @arg CAMERA_CONTRAST_LEVEL0: for contrast -2 - * @param brightness_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_BRIGHTNESS_LEVEL4: for brightness +2 - * @arg CAMERA_BRIGHTNESS_LEVEL3: for brightness +1 - * @arg CAMERA_BRIGHTNESS_LEVEL2: for brightness 0 - * @arg CAMERA_BRIGHTNESS_LEVEL1: for brightness -1 - * @arg CAMERA_BRIGHTNESS_LEVEL0: for brightness -2 - */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level) -{ - if(CameraDrv->Config != NULL) - { - CameraDrv->Config(CameraHwAddress, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level); - } -} - -/** - * @brief Configures the camera white balance. - * @param Mode: black_white mode - * This parameter can be one of the following values: - * @arg CAMERA_BLACK_WHITE_BW - * @arg CAMERA_BLACK_WHITE_NEGATIVE - * @arg CAMERA_BLACK_WHITE_BW_NEGATIVE - * @arg CAMERA_BLACK_WHITE_NORMAL - */ -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode) -{ - if(CameraDrv->Config != NULL) - { - CameraDrv->Config(CameraHwAddress, CAMERA_BLACK_WHITE, Mode, 0); - } -} - -/** - * @brief Configures the camera color effect. - * @param Effect: Color effect - * This parameter can be one of the following values: - * @arg CAMERA_COLOR_EFFECT_NONE - * @arg CAMERA_COLOR_EFFECT_BLUE - * @arg CAMERA_COLOR_EFFECT_GREEN - * @arg CAMERA_COLOR_EFFECT_RED - * @arg CAMERA_COLOR_EFFECT_ANTIQUE - */ -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect) -{ - if(CameraDrv->Config != NULL) - { - CameraDrv->Config(CameraHwAddress, CAMERA_COLOR_EFFECT, Effect, 0); - } -} - -/** - * @brief Handles DCMI interrupt request. - */ -void BSP_CAMERA_IRQHandler(void) -{ - HAL_DCMI_IRQHandler(&hDcmiEval); -} - -/** - * @brief Handles DMA interrupt request. - */ -void BSP_CAMERA_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(hDcmiEval.DMA_Handle); -} - -/** - * @brief Get the capture size in pixels unit. - * @param Resolution: the current resolution. - * @retval capture size in pixels unit. - */ -static uint32_t GetSize(uint32_t Resolution) -{ - uint32_t size = 0; - - /* Get capture size */ - switch (Resolution) - { - case CAMERA_R160x120: - { - size = 0x2580; - } - break; - case CAMERA_R320x240: - { - size = 0x9600; - } - break; - case CAMERA_R480x272: - { - size = 0xFF00; - } - break; - case CAMERA_R640x480: - { - size = 0x25800; - } - break; - default: - { - break; - } - } - - return size; -} - -/** - * @brief Initializes the DCMI MSP. - * @param hdcmi: HDMI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params) -{ - static DMA_HandleTypeDef hdma_eval; - GPIO_InitTypeDef gpio_init_structure; - - /*** Enable peripherals and GPIO clocks ***/ - /* Enable DCMI clock */ - __HAL_RCC_DCMI_CLK_ENABLE(); - - /* Enable DMA2 clock */ - __HAL_RCC_DMA2_CLK_ENABLE(); - - /* Enable GPIO clocks */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - - /*** Configure the GPIO ***/ - /* Configure DCMI GPIO as alternate function */ - gpio_init_structure.Pin = GPIO_PIN_4 | GPIO_PIN_6; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOA, &gpio_init_structure); - - gpio_init_structure.Pin = GPIO_PIN_7; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOB, &gpio_init_structure); - - gpio_init_structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_11; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - gpio_init_structure.Pin = GPIO_PIN_3 | GPIO_PIN_6; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - gpio_init_structure.Pin = GPIO_PIN_5 | GPIO_PIN_6; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /*** Configure the DMA ***/ - /* Set the parameters to be configured */ - hdma_eval.Init.Channel = DMA_CHANNEL_1; - hdma_eval.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_eval.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_eval.Init.MemInc = DMA_MINC_ENABLE; - hdma_eval.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_eval.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_eval.Init.Mode = DMA_CIRCULAR; - hdma_eval.Init.Priority = DMA_PRIORITY_HIGH; - hdma_eval.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_eval.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_eval.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_eval.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_eval.Instance = DMA2_Stream1; - - /* Associate the initialized DMA handle to the DCMI handle */ - __HAL_LINKDMA(hdcmi, DMA_Handle, hdma_eval); - - /*** Configure the NVIC for DCMI and DMA ***/ - /* NVIC configuration for DCMI transfer complete interrupt */ - HAL_NVIC_SetPriority(DCMI_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DCMI_IRQn); - - /* NVIC configuration for DMA2D transfer complete interrupt */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_Init(hdcmi->DMA_Handle); -} - -/** - * @brief DeInitializes the DCMI MSP. - * @param hdcmi: HDMI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params) -{ - /* Disable NVIC for DCMI transfer complete interrupt */ - HAL_NVIC_DisableIRQ(DCMI_IRQn); - - /* Disable NVIC for DMA2 transfer complete interrupt */ - HAL_NVIC_DisableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_DeInit(hdcmi->DMA_Handle); - - /* Disable DCMI clock */ - __HAL_RCC_DCMI_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Line event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_LineEventCallback(); -} - -/** - * @brief Line Event callback. - */ -__weak void BSP_CAMERA_LineEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_LineEventCallback could be implemented in the user file - */ -} - -/** - * @brief VSYNC event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_VsyncEventCallback(); -} - -/** - * @brief VSYNC Event callback. - */ -__weak void BSP_CAMERA_VsyncEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_VsyncEventCallback could be implemented in the user file - */ -} - -/** - * @brief Frame event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_FrameEventCallback(); -} - -/** - * @brief Frame Event callback. - */ -__weak void BSP_CAMERA_FrameEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_FrameEventCallback could be implemented in the user file - */ -} - -/** - * @brief Error callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_ErrorCallback(); -} - -/** - * @brief Error callback. - */ -__weak void BSP_CAMERA_ErrorCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_ErrorCallback could be implemented in the user file - */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.h deleted file mode 100644 index 4631ee5a45..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_camera.h +++ /dev/null @@ -1,158 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_camera.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_camera.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_CAMERA_H -#define __STM32469I_EVAL_CAMERA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include Camera component Driver */ -#include "../Components/s5k5cag/s5k5cag.h" -#include "../Components/ov5640/ov5640.h" - -/* Include IO Driver */ -#include "stm32469i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I-EVAL_CAMERA - * @{ - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Exported_Types STM32469I EVAL CAMERA Exported Types - * @{ - */ - -/** - * @brief Camera State structures definition - */ -typedef enum -{ - CAMERA_OK = 0x00, - CAMERA_ERROR = 0x01, - CAMERA_TIMEOUT = 0x02, - CAMERA_NOT_DETECTED = 0x03, - CAMERA_NOT_SUPPORTED = 0x04 - -} Camera_StatusTypeDef; - -/** - * @brief Camera Image rotation definition - * in frame buffer for LCD Display. - */ -typedef enum -{ - CAMERA_NO_ROTATION = 0x00, - CAMERA_ROTATION_90 = 0x01, - CAMERA_ROTATION_INVALID = 0x02 - -} Camera_RotationTypeDef; - -#define RESOLUTION_R160x120 CAMERA_R160x120 /* QQVGA Resolution */ -#define RESOLUTION_R320x240 CAMERA_R320x240 /* QVGA Resolution */ -#define RESOLUTION_R480x272 CAMERA_R480x272 /* 480x272 Resolution */ -#define RESOLUTION_R640x480 CAMERA_R640x480 /* VGA Resolution */ - -#define CAMERA_VGA_RES_X 640 -#define CAMERA_VGA_RES_Y 480 -#define CAMERA_480x272_RES_X 480 -#define CAMERA_480x272_RES_Y 272 -#define CAMERA_QVGA_RES_X 320 -#define CAMERA_QVGA_RES_Y 240 -#define CAMERA_QQVGA_RES_X 160 -#define CAMERA_QQVGA_RES_Y 120 - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Exported_Constants STM32469I EVAL CAMERA Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_CAMERA_Exported_Functions STM32469I EVAL CAMERA Exported Functions - * @{ - */ - -uint8_t BSP_CAMERA_SetRotation(uint32_t rotation); -uint32_t BSP_CAMERA_GetRotation(void); - -uint8_t BSP_CAMERA_Init(uint32_t Resolution); -uint8_t BSP_CAMERA_DeInit(void); -void BSP_CAMERA_ContinuousStart(uint8_t *buff); -void BSP_CAMERA_SnapshotStart(uint8_t *buff); -void BSP_CAMERA_Suspend(void); -void BSP_CAMERA_Resume(void); -uint8_t BSP_CAMERA_Stop(void); -void BSP_CAMERA_HwReset(void); -void BSP_CAMERA_PwrDown(void); -void BSP_CAMERA_LineEventCallback(void); -void BSP_CAMERA_VsyncEventCallback(void); -void BSP_CAMERA_FrameEventCallback(void); -void BSP_CAMERA_ErrorCallback(void); - -/* Camera features functions prototype */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level); -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode); -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect); - -/* To be called in DCMI_IRQHandler function */ -void BSP_CAMERA_IRQHandler(void); - -/* To be called in DMA2_Stream1_IRQHandler function */ -void BSP_CAMERA_DMA_IRQHandler(void); -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params); -void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_CAMERA_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.c deleted file mode 100644 index 4abd907f7b..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.c +++ /dev/null @@ -1,453 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24LR64 - * EEPROM memory. - * To be able to use this driver, the switch EE_M24LR64 must be defined - * in your toolchain compiler preprocessor - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24LR64) is available on separate daughter - * board ANT7-M24LR-A, which is not provided with the STM32469I-EVAL - * board. - * To use this driver you have to connect the ANT7-M24LR-A to CN2 - * connector of STM32469I-EVAL board. - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm32469i_eval.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm32469i_eval.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and BSP_EEPROM_WritePage()) use DMA mode to perform the data - * transfer to/from EEPROM memory. - * - * @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform - * small write (less than 1 page) BUT The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24LR64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0(GND) | 1 (0V) | - * | . | AC0 | 2 | - * | . | AC1 | 3 | - * | . | VSS | 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | . | E1(GND) | 7 (0V) | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_EEPROM STM32469I EVAL EEPROM - * @brief This file includes the I2C EEPROM driver of STM32469I-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Types STM32469I EVAL EEPROM Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Defines STM32469I EVAL EEPROM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Macros STM32469I EVAL EEPROM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Variables STM32469I EVAL EEPROM Private Variables - * @{ - */ -__IO uint16_t EEPROMAddress = 0; -__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Function_Prototypes STM32469I EVAL EEPROM Private Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Private_Functions STM32469I EVAL EEPROM Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * - * @note There are 2 different versions of M24LR64 (A01 & A02). - * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) - * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address for A01 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A01; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* Select the EEPROM address for A02 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A02; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - } - return EEPROM_OK; -} - -/** - * @brief DeInitializes the EEPROM. - * @retval EEPROM state - */ -uint8_t BSP_EEPROM_DeInit(void) -{ - /* I2C won't be disabled because common to other functionalities */ - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage== 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.h deleted file mode 100644 index 1b58a2d911..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_eeprom.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32469i_eval_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F469I_EVAL_EEPROM_H -#define __STM32F469I_EVAL_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I-EVAL_EEPROM - * @brief This file includes the I2C EEPROM driver of STM32469I EVAL evaluation board. - * @{ - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Exported_Types STM32469I EVAL EEPROM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Exported_Constants STM32469I EVAL EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE ((uint8_t)4) -#define EEPROM_MAX_SIZE ((uint16_t)0x2000) /* 64Kbit */ - -/* Maximum Timeout values for flags and events waiting loops. -This timeout is based on systick set to 1ms*/ -/* Timeout for read based if read all the EEPROM : EEPROM_MAX_SIZE * I2C_SPEED (640ms) */ -#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) -/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * I2C_SPEED (320us) */ -#define EEPROM_WRITE_TIMEOUT ((uint32_t)(10)) - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS 3000 - -#define EEPROM_OK 0 -#define EEPROM_FAIL 1 -#define EEPROM_TIMEOUT 2 -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Exported_Macros STM32469I EVAL EEPROM Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_EEPROM_Exported_Functions STM32469I EVAL EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint8_t BSP_EEPROM_DeInit(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occur during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_EEPROM_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.c deleted file mode 100644 index d6efc7ca07..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.c +++ /dev/null @@ -1,281 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_io.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the IO pins - * on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IO module of the STM32469I-EVAL evaluation - board. - - The MFXSTM32L152 IO expander device component driver must be included with this - driver in order to run the IO functionalities commanded by the IO expander - device mounted on the evaluation board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the IO module using the BSP_IO_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the IO functionalities use. - - + IO functionalities use - o The IO pin mode is configured when calling the function BSP_IO_ConfigPin(), you - must specify the desired IO mode by choosing the "IO_ModeTypedef" parameter - predefined value. - o If an IO pin is used in interrupt mode, the function BSP_IO_ITGetStatus() is - needed to get the interrupt status. To clear the IT pending bits, you should - call the function BSP_IO_ITClearPin() with specifying the IO pending bit to clear. - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - o To get/set an IO pin combination state you can use the functions - BSP_IO_ReadPin()/BSP_IO_WritePin() or the function BSP_IO_TogglePin() to toggle the pin - state. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_IO STM32469I EVAL IO - * @{ - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Types_Definitions STM32469I EVAL IO Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Defines STM32469I EVAL IO Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Macros STM32469I EVAL IO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Variables STM32469I EVAL IO Private Variables - * @{ - */ -static IO_DrvTypeDef *IoDrv = NULL; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Function_Prototypes STM32469I EVAL IO Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Private_Functions STM32469I EVAL IO Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the IO functionalities and configures all - * necessary hardware resources (GPIOs, clocks..). - * @note BSP_IO_Init() is using HAL_Delay() function to ensure that MFXSTM32L152 - * IO Expander is correctly reset. HAL_Delay() function provides accurate - * delay (in milliseconds) based on variable incremented in SysTick ISR. - * This implies that if BSP_IO_Init() is called from a peripheral ISR process, - * then the SysTick interrupt must have higher priority (numerically lower) - * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_Init(void) -{ - uint8_t ret = IO_ERROR; - uint8_t mfxstm32l152_id = 0; - HAL_Delay(1); - /* Read ID and verify the IO expander is ready */ - mfxstm32l152_id = mfxstm32l152_io_drv.ReadID(IO_I2C_ADDRESS); - if((mfxstm32l152_id == MFXSTM32L152_ID_1) || (mfxstm32l152_id == MFXSTM32L152_ID_2)) - { - /* Initialize the IO driver structure */ - IoDrv = &mfxstm32l152_io_drv; - ret = IO_OK; - } - - if(ret == IO_OK) - { - IoDrv->Init(IO_I2C_ADDRESS); - IoDrv->Start(IO_I2C_ADDRESS, IO_PIN_ALL); - } - return ret; -} - -/** - * @brief DeInit allows Mfx Initialization to be executed again - * @note BSP_IO_Init() has no effect if the IoDrv is already initialized - * BSP_IO_DeInit() allows to erase the pointer such to allow init to be effective - * @retval IO_OK - */ -uint8_t BSP_IO_DeInit(void) -{ - IoDrv = NULL; - return IO_OK; -} - -/** - * @brief Gets the selected pins IT status. - * @param IoPin: Selected pins to check the status. - * This parameter can be any combination of the IO pins. - * @retval IO_OK if read status OK. Other value if error. - */ -uint32_t BSP_IO_ITGetStatus(uint32_t IoPin) -{ - /* Return the IO Pin IT status */ - return (IoDrv->ITStatus(IO_I2C_ADDRESS, IoPin)); -} - -/** - * @brief Clears all the IO IT pending bits. - */ -void BSP_IO_ITClear(void) -{ - /* Clear all IO IT pending bits */ - IoDrv->ClearIT(IO_I2C_ADDRESS, MFXSTM32L152_GPIO_PINS_ALL); -} - -/** - * @brief Clear only one or a selection of IO IT pending bits. - * @param IO_Pins_To_Clear : MFX IRQ status IO pin to clear (or combination of several IOs) - */ -void BSP_IO_ITClearPin(uint32_t IO_Pins_To_Clear) -{ - /* Clear only the selected list of IO IT pending bits */ - IoDrv->ClearIT(IO_I2C_ADDRESS, IO_Pins_To_Clear); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter can be one of the following values: - * @arg MFXSTM32L152_GPIO_PIN_x: where x can be from 0 to 23. - * @param IO_Mode: IO pin mode to configure - * This parameter can be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - * @arg IO_MODE_ANALOG - * @arg IO_MODE_OFF - * @arg IO_MODE_INPUT_PU, - * @arg IO_MODE_INPUT_PD, - * @arg IO_MODE_OUTPUT_OD, - * @arg IO_MODE_OUTPUT_OD_PU, - * @arg IO_MODE_OUTPUT_OD_PD, - * @arg IO_MODE_OUTPUT_PP, - * @arg IO_MODE_OUTPUT_PP_PU, - * @arg IO_MODE_OUTPUT_PP_PD, - * @arg IO_MODE_IT_RISING_EDGE_PU - * @arg IO_MODE_IT_FALLING_EDGE_PU - * @arg IO_MODE_IT_LOW_LEVEL_PU - * @arg IO_MODE_IT_HIGH_LEVEL_PU - * @arg IO_MODE_IT_RISING_EDGE_PD - * @arg IO_MODE_IT_FALLING_EDGE_PD - * @arg IO_MODE_IT_LOW_LEVEL_PD - * @arg IO_MODE_IT_HIGH_LEVEL_PD - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_ConfigPin(uint32_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - /* Configure the selected IO pin(s) mode */ - IoDrv->Config(IO_I2C_ADDRESS, IO_Pin, IO_Mode); - - return IO_OK; -} - -/** - * @brief Sets the selected pins state. - * @param IO_Pin: Selected pins to write. - * This parameter can be any combination of the IO pins. - * @param PinState: New pins state to write - */ -void BSP_IO_WritePin(uint32_t IO_Pin, BSP_IO_PinStateTypeDef PinState) -{ - /* Set the Pin state */ - IoDrv->WritePin(IO_I2C_ADDRESS, IO_Pin, PinState); -} - -/** - * @brief Gets the selected pins current state. - * @param IO_Pin: Selected pins to read. - * This parameter can be any combination of the IO pins. - * @retval The current pins state - */ -uint32_t BSP_IO_ReadPin(uint32_t IO_Pin) -{ - return(IoDrv->ReadPin(IO_I2C_ADDRESS, IO_Pin)); -} - -/** - * @brief Toggles the selected pins state. - * @param IO_Pin: Selected pins to toggle. - * This parameter can be any combination of the IO pins. - * @note This function is only used to toggle one pin in the same time - */ -void BSP_IO_TogglePin(uint32_t IO_Pin) -{ - /* Toggle the current pin state */ - if(IoDrv->ReadPin(IO_I2C_ADDRESS, IO_Pin) != 0) /* Set */ - { - IoDrv->WritePin(IO_I2C_ADDRESS, IO_Pin, 0); /* Reset */ - } - else - { - IoDrv->WritePin(IO_I2C_ADDRESS, IO_Pin, 1); /* Set */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.h deleted file mode 100644 index 6d94cb7b21..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_io.h +++ /dev/null @@ -1,138 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_io.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_io.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_IO_H -#define __STM32469I_EVAL_IO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" -/* Include IO component driver */ -#include "../Components/mfxstm32l152/mfxstm32l152.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_IO STM32469I EVAL IO - * @{ - */ - -/** @defgroup STM32469I-EVAL_IO_Exported_Types STM32469I EVAL IO Exported Types - * @{ - */ - - -typedef enum -{ - BSP_IO_PIN_RESET = 0, - BSP_IO_PIN_SET = 1 -}BSP_IO_PinStateTypeDef; - -typedef enum -{ - IO_OK = 0, - IO_ERROR = 1, - IO_TIMEOUT = 2 -}IO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Exported_Constants STM32469I EVAL IO Exported Constants - * @{ - */ -#define IO_PIN_0 ((uint32_t)0x0001) -#define IO_PIN_1 ((uint32_t)0x0002) -#define IO_PIN_2 ((uint32_t)0x0004) -#define IO_PIN_3 ((uint32_t)0x0008) -#define IO_PIN_4 ((uint32_t)0x0010) -#define IO_PIN_5 ((uint32_t)0x0020) -#define IO_PIN_6 ((uint32_t)0x0040) -#define IO_PIN_7 ((uint32_t)0x0080) -#define IO_PIN_8 ((uint32_t)0x0100) -#define IO_PIN_9 ((uint32_t)0x0200) -#define IO_PIN_10 ((uint32_t)0x0400) -#define IO_PIN_11 ((uint32_t)0x0800) -#define IO_PIN_12 ((uint32_t)0x1000) -#define IO_PIN_13 ((uint32_t)0x2000) -#define IO_PIN_14 ((uint32_t)0x4000) -#define IO_PIN_15 ((uint32_t)0x8000) -#define IO_PIN_16 ((uint32_t)0x010000) -#define IO_PIN_17 ((uint32_t)0x020000) -#define IO_PIN_18 ((uint32_t)0x040000) -#define IO_PIN_19 ((uint32_t)0x080000) -#define IO_PIN_20 ((uint32_t)0x100000) -#define IO_PIN_21 ((uint32_t)0x200000) -#define IO_PIN_22 ((uint32_t)0x400000) -#define IO_PIN_23 ((uint32_t)0x800000) -#define IO_PIN_ALL ((uint32_t)0xFFFFFF) -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Exported_Macro STM32469I EVAL IO Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_IO_Exported_Functions STM32469I EVAL IO Exported Functions - * @{ - */ -uint8_t BSP_IO_Init(void); -uint8_t BSP_IO_DeInit(void); -uint32_t BSP_IO_ITGetStatus(uint32_t IO_Pin); -void BSP_IO_ITClear(void); -void BSP_IO_ITClearPin(uint32_t IO_Pins_To_Clear); -uint8_t BSP_IO_ConfigPin(uint32_t IO_Pin, IO_ModeTypedef IO_Mode); -void BSP_IO_WritePin(uint32_t IO_Pin, BSP_IO_PinStateTypeDef PinState); -uint32_t BSP_IO_ReadPin(uint32_t IO_Pin); -void BSP_IO_TogglePin(uint32_t IO_Pin); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_IO_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.c deleted file mode 100644 index 9e42a5325a..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.c +++ /dev/null @@ -1,1609 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive directly in video mode a LCD TFT using the DSI interface. - The following IPs are implied : DSI Host IP block working - in conjunction to the LTDC controller. - - This driver is linked by construction to LCD KoD mounted on board MB1166. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. - o Enable the LCD display using the BSP_LCD_DisplayOn() function. - - + Options - o Configure and enable the color keying functionality using the - BSP_LCD_SetColorKeying() function. - o Modify in the fly the transparency and/or the frame buffer address - using the following functions: - - BSP_LCD_SetTransparency() - - BSP_LCD_SetLayerAddress() - - + Display on LCD - o Clear the whole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I_EVAL_LCD STM32469I EVAL LCD - * @{ - */ - -/** @defgroup STM32469I-EVAL_LCD_Private_TypesDefinitions STM32469I EVAL LCD Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Private_Defines STM32469I EVAL LCD Private Defines - * @{ - */ -static DSI_VidCfgTypeDef hdsivideo_handle; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Private_Macros STM32469I EVAL LCD Private Macros - * @{ - */ -#define ABS(X) ((X) > 0 ? (X) : -(X)) - -#define POLY_X(Z) ((int32_t)((Points + (Z))->X)) -#define POLY_Y(Z) ((int32_t)((Points + (Z))->Y)) -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Exported_Variables STM32469I EVAL LCD Exported Variables - * @{ - */ -DMA2D_HandleTypeDef hdma2d_eval; -LTDC_HandleTypeDef hltdc_eval; -DSI_HandleTypeDef hdsi_eval; -uint32_t lcd_x_size = OTM8009A_800X480_WIDTH; -uint32_t lcd_y_size = OTM8009A_800X480_HEIGHT; -/** - * @} - */ - - -/** @defgroup STM32469I-EVAL_LCD_Private_Variables STM32469I EVAL LCD Private Variables - * @{ - */ - -/** - * @brief Default Active LTDC Layer in which drawing is made is LTDC Layer Background - */ -static uint32_t ActiveLayer = LTDC_ACTIVE_LAYER_BACKGROUND; - -/** - * @brief Current Drawing Layer properties variable - */ -static LCD_DrawPropTypeDef DrawProp[LTDC_MAX_LAYER_NUMBER]; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Private_FunctionPrototypes STM32469I EVAL LCD Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex); -static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode); -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Exported_Functions STM32469I EVAL LCD Exported Functions - * @{ - */ - -/** - * @brief Initializes the DSI LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - return (BSP_LCD_InitEx(LCD_ORIENTATION_LANDSCAPE)); -} - -/** - * @brief Initializes the DSI LCD. - * The ititialization is done as below: - * - DSI PLL ititialization - * - DSI ititialization - * - LTDC ititialization - * - OTM8009A LCD Display IC Driver ititialization - * @retval LCD state - */ -uint8_t BSP_LCD_InitEx(LCD_OrientationTypeDef orientation) -{ - DSI_PLLInitTypeDef dsiPllInit; - DSI_PHY_TimerTypeDef PhyTimings; - static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; - uint32_t LcdClock = 27429; /*!< LcdClk = 27429 kHz */ - - uint32_t laneByteClk_kHz = 0; - uint32_t VSA; /*!< Vertical start active time in units of lines */ - uint32_t VBP; /*!< Vertical Back Porch time in units of lines */ - uint32_t VFP; /*!< Vertical Front Porch time in units of lines */ - uint32_t VACT; /*!< Vertical Active time in units of lines = imageSize Y in pixels to display */ - uint32_t HSA; /*!< Horizontal start active time in units of lcdClk */ - uint32_t HBP; /*!< Horizontal Back Porch time in units of lcdClk */ - uint32_t HFP; /*!< Horizontal Front Porch time in units of lcdClk */ - uint32_t HACT; /*!< Horizontal Active time in units of lcdClk = imageSize X in pixels to display */ - - - /* Toggle Hardware Reset of the DSI LCD using - * its XRES signal (active low) */ - BSP_LCD_Reset(); - - /* Call first MSP Initialize only in case of first initialization - * This will set IP blocks LTDC, DSI and DMA2D - * - out of reset - * - clocked - * - NVIC IRQ related to IP blocks enabled - */ - BSP_LCD_MspInit(); - -/*************************DSI Initialization***********************************/ - - /* Base address of DSI Host/Wrapper registers to be set before calling De-Init */ - hdsi_eval.Instance = DSI; - - HAL_DSI_DeInit(&(hdsi_eval)); - - dsiPllInit.PLLNDIV = 100; - dsiPllInit.PLLIDF = DSI_PLL_IN_DIV5; - dsiPllInit.PLLODF = DSI_PLL_OUT_DIV1; - laneByteClk_kHz = 62500; /* 500 MHz / 8 = 62.5 MHz = 62500 kHz */ - - /* Set number of Lanes */ - hdsi_eval.Init.NumberOfLanes = DSI_TWO_DATA_LANES; - - /* TXEscapeCkdiv = f(LaneByteClk)/15.62 = 4 */ - hdsi_eval.Init.TXEscapeCkdiv = laneByteClk_kHz/15620; - - HAL_DSI_Init(&(hdsi_eval), &(dsiPllInit)); - - /* Timing parameters for all Video modes - * Set Timing parameters of LTDC depending on its chosen orientation - */ - if(orientation == LCD_ORIENTATION_PORTRAIT) - { - lcd_x_size = OTM8009A_480X800_WIDTH; /* 480 */ - lcd_y_size = OTM8009A_480X800_HEIGHT; /* 800 */ - } - else - { - /* lcd_orientation == LCD_ORIENTATION_LANDSCAPE */ - lcd_x_size = OTM8009A_800X480_WIDTH; /* 800 */ - lcd_y_size = OTM8009A_800X480_HEIGHT; /* 480 */ - } - - HACT = lcd_x_size; - VACT = lcd_y_size; - - /* The following values are same for portrait and landscape orientations */ - VSA = OTM8009A_480X800_VSYNC; /* 12 */ - VBP = OTM8009A_480X800_VBP; /* 12 */ - VFP = OTM8009A_480X800_VFP; /* 12 */ - HSA = OTM8009A_480X800_HSYNC; /* 63 */ - HBP = OTM8009A_480X800_HBP; /* 120 */ - HFP = OTM8009A_480X800_HFP; /* 120 */ - - hdsivideo_handle.VirtualChannelID = LCD_OTM8009A_ID; - hdsivideo_handle.ColorCoding = LCD_DSI_PIXEL_DATA_FMT_RBG888; - hdsivideo_handle.VSPolarity = DSI_VSYNC_ACTIVE_HIGH; - hdsivideo_handle.HSPolarity = DSI_HSYNC_ACTIVE_HIGH; - hdsivideo_handle.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH; - hdsivideo_handle.Mode = DSI_VID_MODE_BURST; /* Mode Video burst ie : one LgP per line */ - hdsivideo_handle.NullPacketSize = 0xFFF; - hdsivideo_handle.NumberOfChunks = 0; - hdsivideo_handle.PacketSize = HACT; /* Value depending on display orientation choice portrait/landscape */ - hdsivideo_handle.HorizontalSyncActive = (HSA * laneByteClk_kHz) / LcdClock; - hdsivideo_handle.HorizontalBackPorch = (HBP * laneByteClk_kHz) / LcdClock; - hdsivideo_handle.HorizontalLine = ((HACT + HSA + HBP + HFP) * laneByteClk_kHz) / LcdClock; /* Value depending on display orientation choice portrait/landscape */ - hdsivideo_handle.VerticalSyncActive = VSA; - hdsivideo_handle.VerticalBackPorch = VBP; - hdsivideo_handle.VerticalFrontPorch = VFP; - hdsivideo_handle.VerticalActive = VACT; /* Value depending on display orientation choice portrait/landscape */ - - /* Enable or disable sending LP command while streaming is active in video mode */ - hdsivideo_handle.LPCommandEnable = DSI_LP_COMMAND_ENABLE; /* Enable sending commands in mode LP (Low Power) */ - - /* Largest packet size possible to transmit in LP mode in VSA, VBP, VFP regions */ - /* Only useful when sending LP packets is allowed while streaming is active in video mode */ - hdsivideo_handle.LPLargestPacketSize = 16; - - /* Largest packet size possible to transmit in LP mode in HFP region during VACT period */ - /* Only useful when sending LP packets is allowed while streaming is active in video mode */ - hdsivideo_handle.LPVACTLargestPacketSize = 0; - - - /* Specify for each region of the video frame, if the transmission of command in LP mode is allowed in this region */ - /* while streaming is active in video mode */ - hdsivideo_handle.LPHorizontalFrontPorchEnable = DSI_LP_HFP_ENABLE; /* Allow sending LP commands during HFP period */ - hdsivideo_handle.LPHorizontalBackPorchEnable = DSI_LP_HBP_ENABLE; /* Allow sending LP commands during HBP period */ - hdsivideo_handle.LPVerticalActiveEnable = DSI_LP_VACT_ENABLE; /* Allow sending LP commands during VACT period */ - hdsivideo_handle.LPVerticalFrontPorchEnable = DSI_LP_VFP_ENABLE; /* Allow sending LP commands during VFP period */ - hdsivideo_handle.LPVerticalBackPorchEnable = DSI_LP_VBP_ENABLE; /* Allow sending LP commands during VBP period */ - hdsivideo_handle.LPVerticalSyncActiveEnable = DSI_LP_VSYNC_ENABLE; /* Allow sending LP commands during VSync = VSA period */ - - /* Configure DSI Video mode timings with settings set above */ - HAL_DSI_ConfigVideoMode(&(hdsi_eval), &(hdsivideo_handle)); - - /* Configure DSI PHY HS2LP and LP2HS timings */ - PhyTimings.ClockLaneHS2LPTime = 35; - PhyTimings.ClockLaneLP2HSTime = 35; - PhyTimings.DataLaneHS2LPTime = 35; - PhyTimings.DataLaneLP2HSTime = 35; - PhyTimings.DataLaneMaxReadTime = 0; - PhyTimings.StopWaitTime = 10; - HAL_DSI_ConfigPhyTimer(&hdsi_eval, &PhyTimings); - - -/*************************End DSI Initialization*******************************/ - - -/************************LTDC Initialization***********************************/ - - /* Timing Configuration */ - hltdc_eval.Init.HorizontalSync = (HSA - 1); - hltdc_eval.Init.AccumulatedHBP = (HSA + HBP - 1); - hltdc_eval.Init.AccumulatedActiveW = (lcd_x_size + HSA + HBP - 1); - hltdc_eval.Init.TotalWidth = (lcd_x_size + HSA + HBP + HFP - 1); - - /* Initialize the LCD pixel width and pixel height */ - hltdc_eval.LayerCfg->ImageWidth = lcd_x_size; - hltdc_eval.LayerCfg->ImageHeight = lcd_y_size; - - - /* LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 384 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 384 MHz / 7 = 54.857 MHz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_2 = 54.857 MHz / 2 = 27.429 MHz */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - PeriphClkInitStruct.PLLSAI.PLLSAIN = 384; - PeriphClkInitStruct.PLLSAI.PLLSAIR = 7; - PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - - /* Background value */ - hltdc_eval.Init.Backcolor.Blue = 0; - hltdc_eval.Init.Backcolor.Green = 0; - hltdc_eval.Init.Backcolor.Red = 0; - hltdc_eval.Init.PCPolarity = LTDC_PCPOLARITY_IPC; - hltdc_eval.Instance = LTDC; - - /* Get LTDC Configuration from DSI Configuration */ - HAL_LTDC_StructInitFromVideoConfig(&(hltdc_eval), &(hdsivideo_handle)); - - /* Initialize the LTDC */ - HAL_LTDC_Init(&hltdc_eval); - - /* Enable the DSI host and wrapper after the LTDC initialization - To avoid any synchronization issue, the DSI shall be started after enabling the LTDC */ - - HAL_DSI_Start(&(hdsi_eval)); - -#if !defined(DATA_IN_ExtSDRAM) - /* Initialize the SDRAM */ - BSP_SDRAM_Init(); -#endif /* DATA_IN_ExtSDRAM */ - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - -/************************End LTDC Initialization*******************************/ - - -/***********************OTM8009A Initialization********************************/ - - /* Initialize the OTM8009A LCD Display IC Driver (KoD LCD IC Driver) - * depending on configuration set in 'hdsivideo_handle'. - */ - OTM8009A_Init(OTM8009A_FORMAT_RGB888, orientation); - -/***********************End OTM8009A Initialization****************************/ - - return LCD_OK; -} - -/** - * @brief BSP LCD Reset - * Hw reset the LCD DSI activating its XRES signal (active low for some time) - * and desactivating it later. - * This signal is only cabled on Eval Rev B and beyond. - */ -void BSP_LCD_Reset(void) -{ -#if !defined(USE_STM32469I_EVAL_REVA) -/* EVAL Rev B and beyond : reset the LCD by activation of XRES (active low) connected to PK7 */ - GPIO_InitTypeDef gpio_init_structure; - - __HAL_RCC_GPIOK_CLK_ENABLE(); - - /* Configure the GPIO on PK7 */ - gpio_init_structure.Pin = GPIO_PIN_7; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - HAL_GPIO_Init(GPIOK, &gpio_init_structure); - - /* Activate XRES active low */ - HAL_GPIO_WritePin(GPIOK, GPIO_PIN_7, GPIO_PIN_RESET); - - HAL_Delay(20); /* wait 20 ms */ - - /* Deactivate XRES */ - HAL_GPIO_WritePin(GPIOK, GPIO_PIN_7, GPIO_PIN_SET); - - /* Wait for 10ms after releasing XRES before sending commands */ - HAL_Delay(10); -#else - -#endif /* USE_STM32469I_EVAL_REVA == 0 */ -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return (lcd_x_size); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return (lcd_y_size); -} - -/** - * @brief Set the LCD X size. - * @param imageWidthPixels : uint32_t image width in pixels unit - */ -void BSP_LCD_SetXSize(uint32_t imageWidthPixels) -{ - hltdc_eval.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels; -} - -/** - * @brief Set the LCD Y size. - * @param imageHeightPixels : uint32_t image height in lines unit - */ -void BSP_LCD_SetYSize(uint32_t imageHeightPixels) -{ - hltdc_eval.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels; -} - - -/** - * @brief Initializes the LCD layers. - * @param LayerIndex: Layer foreground or background - * @param FB_Address: Layer frame buffer - */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) -{ - LCD_LayerCfgTypeDef Layercfg; - - /* Layer Init */ - Layercfg.WindowX0 = 0; - Layercfg.WindowX1 = BSP_LCD_GetXSize(); - Layercfg.WindowY0 = 0; - Layercfg.WindowY1 = BSP_LCD_GetYSize(); - Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; - Layercfg.FBStartAdress = FB_Address; - Layercfg.Alpha = 255; - Layercfg.Alpha0 = 0; - Layercfg.Backcolor.Blue = 0; - Layercfg.Backcolor.Green = 0; - Layercfg.Backcolor.Red = 0; - Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; - Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; - Layercfg.ImageWidth = BSP_LCD_GetXSize(); - Layercfg.ImageHeight = BSP_LCD_GetYSize(); - - HAL_LTDC_ConfigLayer(&hltdc_eval, &Layercfg, LayerIndex); - - DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE; - DrawProp[LayerIndex].pFont = &Font24; - DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; -} - - -/** - * @brief Selects the LCD Layer. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_SelectLayer(uint32_t LayerIndex) -{ - ActiveLayer = LayerIndex; -} - -/** - * @brief Sets an LCD Layer visible - * @param LayerIndex: Visible Layer - * @param State: New state of the specified layer - * This parameter can be one of the following values: - * @arg ENABLE - * @arg DISABLE - */ -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State) -{ - if(State == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&(hltdc_eval), LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&(hltdc_eval), LayerIndex); - } - __HAL_LTDC_RELOAD_CONFIG(&(hltdc_eval)); - -} - -/** - * @brief Configures the transparency. - * @param LayerIndex: Layer foreground or background. - * @param Transparency: Transparency - * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF - */ -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency) -{ - - HAL_LTDC_SetAlpha(&(hltdc_eval), Transparency, LayerIndex); - -} - -/** - * @brief Sets an LCD layer frame buffer address. - * @param LayerIndex: Layer foreground or background - * @param Address: New LCD frame buffer value - */ -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address) -{ - - HAL_LTDC_SetAddress(&(hltdc_eval), Address, LayerIndex); - -} - -/** - * @brief Sets display window. - * @param LayerIndex: Layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Reconfigure the layer size */ - HAL_LTDC_SetWindowSize(&(hltdc_eval), Width, Height, LayerIndex); - - /* Reconfigure the layer position */ - HAL_LTDC_SetWindowPosition(&(hltdc_eval), Xpos, Ypos, LayerIndex); - -} - -/** - * @brief Configures and sets the color keying. - * @param LayerIndex: Layer foreground or background - * @param RGBValue: Color reference - */ -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying(&(hltdc_eval), RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying(&(hltdc_eval), LayerIndex); -} - -/** - * @brief Disables the color keying. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying(&(hltdc_eval), LayerIndex); -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetTextColor(uint32_t Color) -{ - DrawProp[ActiveLayer].TextColor = Color; -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint32_t BSP_LCD_GetTextColor(void) -{ - return DrawProp[ActiveLayer].TextColor; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Layer background color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetBackColor(uint32_t Color) -{ - DrawProp[ActiveLayer].BackColor = Color; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint32_t BSP_LCD_GetBackColor(void) -{ - return DrawProp[ActiveLayer].BackColor; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Layer font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp[ActiveLayer].pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used layer font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp[ActiveLayer].pFont; -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint32_t ret = 0; - - if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888) - { - /* Read data value from SDRAM memory */ - ret = (*(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF); - } - else if((hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88)) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint16_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint8_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - - return ret; -} - -/** - * @brief Clears the whole currently active layer of LTDC. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint32_t Color) -{ - /* Clear the LCD */ - LL_FillBuffer(ActiveLayer, (uint32_t *)(hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color); -} - -/** - * @brief Clears the selected line in currently active layer. - * @param Line: Line to be cleared - */ -void BSP_LCD_ClearStringLine(uint32_t Line) -{ - uint32_t color_backup = DrawProp[ActiveLayer].TextColor; - DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor; - - /* Draw rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height); - - DrawProp[ActiveLayer].TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays one character in currently active layer. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\ - DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters in currently active layer. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Check that the Start column is located in the screen */ - if ((refcolumn < 1) || (refcolumn >= 0x8000)) - { - refcolumn = 1; - } - - /* Send the string character by character on LCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp[ActiveLayer].pFont->Width; - - /* Point on the next character */ - Text++; - i++; - } - -} - -/** - * @brief Displays a maximum of 60 characters on the LCD. - * @param Line: Line where to display the character shape - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Draws an horizontal line in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a vertical line in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws an uni-line (between two points) in currently active layer. - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - CurX = 0; - CurY = Radius; - - while (CurX <= CurY) - { - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } -} - -/** - * @brief Draws an poly-line (between many points) in currently active layer. - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - BSP_LCD_DrawLine(X, Y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture loaded in the internal Flash (32 bpp) in currently active layer. - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address in the internal Flash - */ -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; - uint32_t Address; - uint32_t InputColorMode = 0; - - /* Get bitmap data address offset */ - index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16) + (pbmp[13] << 24); - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - /* Read bit/pixel */ - bit_pixel = pbmp[28] + (pbmp[29] << 8); - - /* Set the address */ - Address = hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); - - /* Get the layer pixel format */ - if ((bit_pixel/8) == 4) - { - InputColorMode = CM_ARGB8888; - } - else if ((bit_pixel/8) == 2) - { - InputColorMode = CM_RGB565; - } - else - { - InputColorMode = CM_RGB888; - } - - /* Bypass the bitmap header */ - pbmp += (index + (width * (height - 1) * (bit_pixel/8))); - - /* Convert picture to ARGB8888 pixel format */ - for(index=0; index < height; index++) - { - /* Pixel format conversion */ - LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)Address, width, InputColorMode); - - /* Increment the source and destination buffers */ - Address+= (BSP_LCD_GetXSize()*4); - pbmp -= width*(bit_pixel/8); - } -} - -/** - * @brief Draws a full rectangle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - uint32_t Xaddress = 0; - - /* Set the text color */ - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - /* Get the rectangle start address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Fill the rectangle */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a full circle in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - - CurX = 0; - CurY = Radius; - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - while (CurX <= CurY) - { - if(CurY > 0) - { - BSP_LCD_DrawHLine(Xpos - CurY, Ypos + CurX, 2*CurY); - BSP_LCD_DrawHLine(Xpos - CurY, Ypos - CurX, 2*CurY); - } - - if(CurX > 0) - { - BSP_LCD_DrawHLine(Xpos - CurX, Ypos - CurY, 2*CurX); - BSP_LCD_DrawHLine(Xpos - CurX, Ypos + CurY, 2*CurX); - } - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points) in currently active layer. - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse in currently active layer. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos+y), (2*(uint16_t)(x/K) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos-y), (2*(uint16_t)(x/K) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Switch back on the display if was switched off by previous call of BSP_LCD_DisplayOff(). - * Exit DSI ULPM mode if was allowed and configured in Dsi Configuration. - */ -void BSP_LCD_DisplayOn(void) -{ - /* Send Display on DCS command to display */ - HAL_DSI_ShortWrite(&(hdsi_eval), - hdsivideo_handle.VirtualChannelID, - DSI_DCS_SHORT_PKT_WRITE_P1, - OTM8009A_CMD_DISPON, - 0x00); - -} - -/** - * @brief Switch Off the display. - * Enter DSI ULPM mode if was allowed and configured in Dsi Configuration. - */ -void BSP_LCD_DisplayOff(void) -{ - /* Send Display off DCS Command to display */ - HAL_DSI_ShortWrite(&(hdsi_eval), - hdsivideo_handle.VirtualChannelID, - DSI_DCS_SHORT_PKT_WRITE_P1, - OTM8009A_CMD_DISPOFF, - 0x00); - -} - -/** - * @brief DCS or Generic short/long write command - * @param NbrParams: Number of parameters. It indicates the write command mode: - * If inferior to 2, a long write command is performed else short. - * @param pParams: Pointer to parameter values table. - * @retval HAL status - */ -void DSI_IO_WriteCmd(uint32_t NbrParams, uint8_t *pParams) -{ - if(NbrParams <= 1) - { - HAL_DSI_ShortWrite(&hdsi_eval, LCD_OTM8009A_ID, DSI_DCS_SHORT_PKT_WRITE_P1, pParams[0], pParams[1]); - } - else - { - HAL_DSI_LongWrite(&hdsi_eval, LCD_OTM8009A_ID, DSI_DCS_LONG_PKT_WRITE, NbrParams, pParams[NbrParams], pParams); - } -} - -/******************************************************************************* - LTDC, DMA2D and DSI BSP Routines -*******************************************************************************/ -/** - * @brief Handles DMA2D interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_DMA2D_IRQHandler(void) -{ - HAL_DMA2D_IRQHandler(&hdma2d_eval); -} - -/** - * @brief Handles DSI interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_DSI_IRQHandler(void) -{ - HAL_DSI_IRQHandler(&(hdsi_eval)); -} - - -/** - * @brief Handles LTDC interrupt request. - * @note : Can be surcharged by application code implementation of the function. - */ -__weak void BSP_LCD_LTDC_IRQHandler(void) -{ - HAL_LTDC_IRQHandler(&(hltdc_eval)); -} - -/** - * @brief De-Initializes the BSP LCD Msp - * Application can surcharge if needed this function implementation. - */ -__weak void BSP_LCD_MspDeInit(void) -{ - /** @brief Disable IRQ of LTDC IP */ - HAL_NVIC_DisableIRQ(LTDC_IRQn); - - /** @brief Disable IRQ of DMA2D IP */ - HAL_NVIC_DisableIRQ(DMA2D_IRQn); - - /** @brief Disable IRQ of DSI IP */ - HAL_NVIC_DisableIRQ(DSI_IRQn); - - /** @brief Force and let in reset state LTDC, DMA2D and DSI Host + Wrapper IPs */ - __HAL_RCC_LTDC_FORCE_RESET(); - __HAL_RCC_DMA2D_FORCE_RESET(); - __HAL_RCC_DSI_FORCE_RESET(); - - /** @brief Disable the LTDC, DMA2D and DSI Host and Wrapper clocks */ - __HAL_RCC_LTDC_CLK_DISABLE(); - __HAL_RCC_DMA2D_CLK_DISABLE(); - __HAL_RCC_DSI_CLK_DISABLE(); -} - -/** - * @brief Initialize the BSP LCD Msp. - * Application can surcharge if needed this function implementation - */ -__weak void BSP_LCD_MspInit(void) -{ - /** @brief Enable the LTDC clock */ - __HAL_RCC_LTDC_CLK_ENABLE(); - - /** @brief Toggle Sw reset of LTDC IP */ - __HAL_RCC_LTDC_FORCE_RESET(); - __HAL_RCC_LTDC_RELEASE_RESET(); - - /** @brief Enable the DMA2D clock */ - __HAL_RCC_DMA2D_CLK_ENABLE(); - - /** @brief Toggle Sw reset of DMA2D IP */ - __HAL_RCC_DMA2D_FORCE_RESET(); - __HAL_RCC_DMA2D_RELEASE_RESET(); - - /** @brief Enable DSI Host and wrapper clocks */ - __HAL_RCC_DSI_CLK_ENABLE(); - - /** @brief Soft Reset the DSI Host and wrapper */ - __HAL_RCC_DSI_FORCE_RESET(); - __HAL_RCC_DSI_RELEASE_RESET(); - - /** @brief NVIC configuration for LTDC interrupt that is now enabled */ - HAL_NVIC_SetPriority(LTDC_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(LTDC_IRQn); - - /** @brief NVIC configuration for DMA2D interrupt that is now enabled */ - HAL_NVIC_SetPriority(DMA2D_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(DMA2D_IRQn); - - /** @brief NVIC configuration for DSI interrupt that is now enabled */ - HAL_NVIC_SetPriority(DSI_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(DSI_IRQn); -} - -/** - * @brief This function handles LTDC Error interrupt Handler. - * @note : Can be surcharged by application code implementation of the function. - */ - -__weak void BSP_LCD_LTDC_ER_IRQHandler(void) -{ - HAL_LTDC_IRQHandler(&(hltdc_eval)); -} - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code) -{ - /* Write data value to all SDRAM memory */ - *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code; -} - - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp[ActiveLayer].pFont->Height; - width = DrawProp[ActiveLayer].pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Fills a buffer. - * @param LayerIndex: Layer index - * @param pDst: Pointer to destination buffer - * @param xSize: Buffer width - * @param ySize: Buffer height - * @param OffLine: Offset - * @param ColorIndex: Color index - */ -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex) -{ - /* Register to memory mode with ARGB8888 as color Mode */ - hdma2d_eval.Init.Mode = DMA2D_R2M; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = OffLine; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, LayerIndex) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @brief Converts a line to an ARGB8888 pixel format. - * @param pSrc: Pointer to source buffer - * @param pDst: Output color - * @param xSize: Buffer width - * @param ColorMode: Input color mode - */ -static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode) -{ - /* Configure the DMA2D Mode, Color Mode and output offset */ - hdma2d_eval.Init.Mode = DMA2D_M2M_PFC; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = 0; - - /* Foreground Configuration */ - hdma2d_eval.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; - hdma2d_eval.LayerCfg[1].InputAlpha = 0xFF; - hdma2d_eval.LayerCfg[1].InputColorMode = ColorMode; - hdma2d_eval.LayerCfg[1].InputOffset = 0; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, 1) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.h deleted file mode 100644 index 682d9d67af..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_lcd.h +++ /dev/null @@ -1,381 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_LCD_H -#define __STM32469I_EVAL_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include LCD component Driver */ - -/* Include OTM8009A LCD Driver IC driver code */ -#include "../Components/otm8009a/otm8009a.h" - -/* Include SDRAM Driver */ -#include "stm32469i_eval_sdram.h" -#include "stm32469i_eval.h" - -#include "../../../Utilities/Fonts/fonts.h" - -#include /* use of memset() */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I_EVAL_LCD STM32469I EVAL LCD - * @{ - */ - -/** @defgroup STM32469I_EVAL_LCD_Exported_Constants STM32469I EVAL LCD Exported Constants - * @{ - */ - -#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef -/** - * @brief LCD FB_StartAddress - */ -#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000) - -/** @brief Maximum number of LTDC layers - */ -#define LTDC_MAX_LAYER_NUMBER ((uint32_t) 2) - -/** @brief LTDC Background layer index - */ -#define LTDC_ACTIVE_LAYER_BACKGROUND ((uint32_t) 0) - -/** @brief LTDC Foreground layer index - */ -#define LTDC_ACTIVE_LAYER_FOREGROUND ((uint32_t) 1) - -/** @brief Number of LTDC layers - */ -#define LTDC_NB_OF_LAYERS ((uint32_t) 2) - -/** @brief LTDC Default used layer index - */ -#define LTDC_DEFAULT_ACTIVE_LAYER LTDC_ACTIVE_LAYER_FOREGROUND - -/** - * @brief LCD status structure definition - */ -#define LCD_OK 0x00 -#define LCD_ERROR 0x01 -#define LCD_TIMEOUT 0x02 - -/** - * @brief LCD Display OTM8009A ID - */ -#define LCD_OTM8009A_ID ((uint32_t) 0) - -/** - * @brief LCD color definitions values - * in ARGB8888 format. - */ - -/** @brief Blue value in ARGB8888 format - */ -#define LCD_COLOR_BLUE ((uint32_t) 0xFF0000FF) - -/** @brief Green value in ARGB8888 format - */ -#define LCD_COLOR_GREEN ((uint32_t) 0xFF00FF00) - -/** @brief Red value in ARGB8888 format - */ -#define LCD_COLOR_RED ((uint32_t) 0xFFFF0000) - -/** @brief Cyan value in ARGB8888 format - */ -#define LCD_COLOR_CYAN ((uint32_t) 0xFF00FFFF) - -/** @brief Magenta value in ARGB8888 format - */ -#define LCD_COLOR_MAGENTA ((uint32_t) 0xFFFF00FF) - -/** @brief Yellow value in ARGB8888 format - */ -#define LCD_COLOR_YELLOW ((uint32_t) 0xFFFFFF00) - -/** @brief Light Blue value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTBLUE ((uint32_t) 0xFF8080FF) - -/** @brief Light Green value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTGREEN ((uint32_t) 0xFF80FF80) - -/** @brief Light Red value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTRED ((uint32_t) 0xFFFF8080) - -/** @brief Light Cyan value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTCYAN ((uint32_t) 0xFF80FFFF) - -/** @brief Light Magenta value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTMAGENTA ((uint32_t) 0xFFFF80FF) - -/** @brief Light Yellow value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTYELLOW ((uint32_t) 0xFFFFFF80) - -/** @brief Dark Blue value in ARGB8888 format - */ -#define LCD_COLOR_DARKBLUE ((uint32_t) 0xFF000080) - -/** @brief Light Dark Green value in ARGB8888 format - */ -#define LCD_COLOR_DARKGREEN ((uint32_t) 0xFF008000) - -/** @brief Light Dark Red value in ARGB8888 format - */ -#define LCD_COLOR_DARKRED ((uint32_t) 0xFF800000) - -/** @brief Dark Cyan value in ARGB8888 format - */ -#define LCD_COLOR_DARKCYAN ((uint32_t) 0xFF008080) - -/** @brief Dark Magenta value in ARGB8888 format - */ -#define LCD_COLOR_DARKMAGENTA ((uint32_t) 0xFF800080) - -/** @brief Dark Yellow value in ARGB8888 format - */ -#define LCD_COLOR_DARKYELLOW ((uint32_t) 0xFF808000) - -/** @brief White value in ARGB8888 format - */ -#define LCD_COLOR_WHITE ((uint32_t) 0xFFFFFFFF) - -/** @brief Light Gray value in ARGB8888 format - */ -#define LCD_COLOR_LIGHTGRAY ((uint32_t) 0xFFD3D3D3) - -/** @brief Gray value in ARGB8888 format - */ -#define LCD_COLOR_GRAY ((uint32_t) 0xFF808080) - -/** @brief Dark Gray value in ARGB8888 format - */ -#define LCD_COLOR_DARKGRAY ((uint32_t) 0xFF404040) - -/** @brief Black value in ARGB8888 format - */ -#define LCD_COLOR_BLACK ((uint32_t) 0xFF000000) - -/** @brief Brown value in ARGB8888 format - */ -#define LCD_COLOR_BROWN ((uint32_t) 0xFFA52A2A) - -/** @brief Orange value in ARGB8888 format - */ -#define LCD_COLOR_ORANGE ((uint32_t) 0xFFFFA500) - -/** @brief Transparent value in ARGB8888 format - */ -#define LCD_COLOR_TRANSPARENT ((uint32_t) 0xFF000000) - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @brief Possible values of - * pixel data format (ie color coding) transmitted on DSI Data lane in DSI packets - */ - -#define LCD_DSI_PIXEL_DATA_FMT_RBG888 DSI_RGB888 /*!< DSI packet pixel format chosen is RGB888 : 24 bpp */ -#define LCD_DSI_PIXEL_DATA_FMT_RBG565 DSI_RGB565 /*!< DSI packet pixel format chosen is RGB565 : 16 bpp */ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Exported_Types STM32469I EVAL LCD Exported Types - * @{ - */ - -/** -* @brief LCD Drawing main properties -*/ -typedef struct -{ - uint32_t TextColor; /*!< Specifies the color of text */ - uint32_t BackColor; /*!< Specifies the background color below the text */ - sFONT *pFont; /*!< Specifies the font used for the text */ - -} LCD_DrawPropTypeDef; - -/** - * @brief LCD Drawing point (pixel) geometric definition - */ -typedef struct -{ - int16_t X; /*!< geometric X position of drawing */ - int16_t Y; /*!< geometric Y position of drawing */ - -} Point; - -/** - * @brief Pointer on LCD Drawing point (pixel) geometric definition - */ -typedef Point * pPoint; - -/** - * @brief LCD drawing Line alignment mode definitions - */ -typedef enum -{ - CENTER_MODE = 0x01, /*!< Center mode */ - RIGHT_MODE = 0x02, /*!< Right mode */ - LEFT_MODE = 0x03 /*!< Left mode */ - -} Text_AlignModeTypdef; - - -/** - * @brief LCD_OrientationTypeDef - * Possible values of Display Orientation - */ -typedef enum -{ - LCD_ORIENTATION_PORTRAIT = 0x00, /*!< Portrait orientation choice of LCD screen */ - LCD_ORIENTATION_LANDSCAPE = 0x01, /*!< Landscape orientation choice of LCD screen */ - LCD_ORIENTATION_INVALID = 0x02 /*!< Invalid orientation choice of LCD screen */ -} LCD_OrientationTypeDef; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_LCD_Exported_Macro STM32469I EVAL LCD Exported Macro - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32469I-EVAL_LCD_Exported_Functions - * @{ - */ - -void BSP_LCD_DMA2D_IRQHandler(void); -void BSP_LCD_DSI_IRQHandler(void); -void BSP_LCD_LTDC_IRQHandler(void); -void BSP_LCD_LTDC_ER_IRQHandler(void); - -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_InitEx(LCD_OrientationTypeDef orientation); - -void BSP_LCD_MspDeInit(void); -void BSP_LCD_MspInit(void); -void BSP_LCD_Reset(void); - -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); -void BSP_LCD_SetXSize(uint32_t imageWidthPixels); -void BSP_LCD_SetYSize(uint32_t imageHeightPixels); - -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address); -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex); -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); - -void BSP_LCD_SelectLayer(uint32_t LayerIndex); -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State); - -void BSP_LCD_SetTextColor(uint32_t Color); -uint32_t BSP_LCD_GetTextColor(void); -void BSP_LCD_SetBackColor(uint32_t Color); -uint32_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel); -void BSP_LCD_Clear(uint32_t Color); -void BSP_LCD_ClearStringLine(uint32_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp); - -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/** - * @} - */ - -/** @addtogroup STM32469I-EVAL_LCD_Exported_Variables - * @{ - */ - -/* @brief DMA2D handle variable */ -extern DMA2D_HandleTypeDef hdma2d_eval; - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_LCD_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.c deleted file mode 100644 index 1b04e0de4f..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.c +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_nor.c - * @author MCD Application Team - * @brief This file includes a standard driver for the M29W256GL70ZA6E NOR flash memory - * device mounted on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the M29W128GL NOR flash external memory mounted - on STM32469I-EVAL evaluation board. - - This driver does not need a specific component driver for the NOR device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the NOR external memory using the BSP_NOR_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external NOR memory. - - + NOR flash operations - o NOR external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_NOR_ReadData()/BSP_NOR_WriteData(). The BSP_NOR_WriteData() performs write operation - of an amount of data by unit (halfword). You can also perform a program data - operation of an amount of data using the function BSP_NOR_ProgramData(). - o The function BSP_NOR_Read_ID() returns the chip IDs stored in the structure - "NOR_IDTypeDef". (see the NOR IDs in the memory data sheet) - o Perform erase block operation using the function BSP_NOR_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_NOR_Erase_Chip(). - o After other operations, the function BSP_NOR_ReturnToReadMode() allows the NOR - flash to return to read mode to perform read operations on it. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_nor.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_NOR STM32469I EVAL NOR - * @{ - */ - -/* Private typedef -----------------------------------------------------------*/ - -/** @defgroup STM32469I-EVAL_NOR_Private_Types_Definitions STM32469I EVAL NOR Private Types Definitions - * @{ - */ - -/** - * @} - */ - -/* Private define ------------------------------------------------------------*/ - -/** @defgroup STM32469I-EVAL_NOR_Private_Defines STM32469I EVAL NOR Private Defines - * @{ - */ - -/** - * @} - */ -/* Private macro -------------------------------------------------------------*/ - -/** @defgroup STM32469I-EVAL_NOR_Private_Macros STM32469I EVAL NOR Private Macros - * @{ - */ -/** - * @} - */ - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup STM32469I-EVAL_NOR_Private_Variables STM32469I EVAL NOR Private Variables - * @{ - */ -NOR_HandleTypeDef NorHandle; -static FMC_NORSRAM_TimingTypeDef Timing; - -/** - * @} - */ - -/* Private function prototypes -----------------------------------------------*/ - -/** @defgroup STM32469I-EVAL_NOR_Private_Function_Prototypes STM32469I EVAL NOR Private Function Prototypes - * @{ - */ - - - -/** - * @} - */ - -/** - * @brief Initializes the NOR device. - * @retval NOR memory status - */ -uint8_t BSP_NOR_Init(void) -{ - NorHandle.Instance = FMC_NORSRAM_DEVICE; - NorHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - /* NOR device configuration */ - Timing.AddressSetupTime = 8; - Timing.AddressHoldTime = 3; - Timing.DataSetupTime = 9; - Timing.BusTurnAroundDuration = 0; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FMC_ACCESS_MODE_A; - - NorHandle.Init.NSBank = FMC_NORSRAM_BANK1; - NorHandle.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - NorHandle.Init.MemoryType = FMC_MEMORY_TYPE_NOR; - NorHandle.Init.MemoryDataWidth = NOR_MEMORY_WIDTH; - NorHandle.Init.BurstAccessMode = NOR_BURSTACCESS; - NorHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - NorHandle.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - NorHandle.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - NorHandle.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - NorHandle.Init.WaitSignal = FMC_WAIT_SIGNAL_ENABLE; - NorHandle.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - NorHandle.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE; - NorHandle.Init.WriteBurst = NOR_WRITEBURST; - NorHandle.Init.ContinuousClock = CONTINUOUSCLOCK_FEATURE; - - /* NOR controller initialization */ - BSP_NOR_MspInit(&NorHandle, NULL); - - if(HAL_NOR_Init(&NorHandle, &Timing, &Timing) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief DeInitializes the NOR device. - * @retval NOR memory status - */ -uint8_t BSP_NOR_DeInit(void) -{ - /* NOR controller initialization */ - BSP_NOR_MspDeInit(&NorHandle, NULL); - - if(HAL_NOR_DeInit(&NorHandle) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Reads an amount of data from the NOR device. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of data to read - * @retval NOR memory status - */ -uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - if(HAL_NOR_ReadBuffer(&NorHandle, NOR_DEVICE_ADDR + uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Returns the NOR memory to read mode. - */ -void BSP_NOR_ReturnToReadMode(void) -{ - HAL_NOR_ReturnToReadMode(&NorHandle); -} - -/** - * @brief Writes an amount of data to the NOR device. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of data to write - * @retval NOR memory status - */ -uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - uint32_t index = uwDataSize; - - while(index > 0) - { - /* Write data to NOR */ - HAL_NOR_Program(&NorHandle, (uint32_t *)(NOR_DEVICE_ADDR + uwStartAddress), pData); - - /* Read NOR device status */ - if(HAL_NOR_GetStatus(&NorHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != HAL_NOR_STATUS_SUCCESS) - { - return NOR_STATUS_ERROR; - } - - /* Update the counters */ - index--; - uwStartAddress += 2; - pData++; - } - - return NOR_STATUS_OK; -} - -/** - * @brief Programs an amount of data to the NOR device. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of data to write - * @retval NOR memory status - */ -uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - /* Send NOR program buffer operation */ - HAL_NOR_ProgramBuffer(&NorHandle, uwStartAddress, pData, uwDataSize); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&NorHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != HAL_NOR_STATUS_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Erases the specified block of the NOR device. - * @param BlockAddress: Block address to erase - * @retval NOR memory status - */ -uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress) -{ - /* Send NOR erase block operation */ - HAL_NOR_Erase_Block(&NorHandle, BlockAddress, NOR_DEVICE_ADDR); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&NorHandle, NOR_DEVICE_ADDR, BLOCKERASE_TIMEOUT) != HAL_NOR_STATUS_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Erases the entire NOR chip. - * @retval NOR memory status - */ -uint8_t BSP_NOR_Erase_Chip(void) -{ - /* Send NOR Erase chip operation */ - HAL_NOR_Erase_Chip(&NorHandle, NOR_DEVICE_ADDR); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&NorHandle, NOR_DEVICE_ADDR, CHIPERASE_TIMEOUT) != HAL_NOR_STATUS_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Reads NOR flash IDs. - * @param pNOR_ID : Pointer to NOR ID structure - * @retval NOR memory status - */ -uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID) -{ - if(HAL_NOR_Read_ID(&NorHandle, pNOR_ID) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Initializes the NOR MSP. - * @param hnor: pointer to nor structure - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_NOR_MspInit(NOR_HandleTypeDef *hnor, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\ - GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\ - GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); -} - -/** - * @brief DeInitializes the NOR MSP. - * @param hnor pointer to NOR structure - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval status - */ -__weak uint8_t BSP_NOR_MspDeInit(NOR_HandleTypeDef *hnor, void *Params) -{ - /* FMC won't be disabled because common to other functionalities */ - - /* Disable only NOR specific GPIOs */ - HAL_GPIO_DeInit(GPIOD, (GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7)); - - return HAL_OK; - -} - -/** - * @brief NOR BSP Wait for Ready/Busy signal. - * @param hnor: Pointer to NOR handle - * @param Timeout: Timeout duration - */ -void HAL_NOR_MspWait(NOR_HandleTypeDef *hnor, uint32_t Timeout) -{ - uint32_t timeout = Timeout; - - /* Polling on Ready/Busy signal */ - while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_BUSY_STATE) && (timeout > 0)) - { - timeout--; - } - - timeout = Timeout; - - /* Polling on Ready/Busy signal */ - while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_READY_STATE) && (timeout > 0)) - { - timeout--; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.h deleted file mode 100644 index 3a5d6325c4..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_nor.h +++ /dev/null @@ -1,130 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_nor.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_nor.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_NOR_H -#define __STM32469I_EVAL_NOR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_NOR STM32469I EVAL NOR - * @{ - */ - -/** @defgroup STM32469I-EVAL_NOR_Exported_Types STM32469I EVAL NOR Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_NOR_Exported_Constants STM32469I EVAL NOR Exported Constants - * @{ - */ -/** - * @brief NOR status structure definition - */ -#define NOR_STATUS_OK ((uint8_t) 0x00) -#define NOR_STATUS_ERROR ((uint8_t) 0x01) -#define NOR_DEVICE_ADDR ((uint32_t)0x60000000) - -/* #define NOR_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_8 */ -#define NOR_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_16 - -#define NOR_BURSTACCESS FMC_BURST_ACCESS_MODE_DISABLE -/* #define NOR_BURSTACCESS FMC_BURST_ACCESS_MODE_ENABLE*/ - -#define NOR_WRITEBURST FMC_WRITE_BURST_DISABLE -/* #define NOR_WRITEBURST FMC_WRITE_BURST_ENABLE */ - -#define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ONLY -/* #define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ASYNC */ - -/* NOR operations Timeout definitions */ -#define BLOCKERASE_TIMEOUT ((uint32_t)0x00A00000) /* NOR block erase timeout */ -#define CHIPERASE_TIMEOUT ((uint32_t)0x30000000) /* NOR chip erase timeout */ -#define PROGRAM_TIMEOUT ((uint32_t)0x00004400) /* NOR program timeout */ - -/* NOR Ready/Busy signal GPIO definitions */ -#define NOR_READY_BUSY_PIN GPIO_PIN_6 -#define NOR_READY_BUSY_GPIO GPIOD -#define NOR_READY_STATE GPIO_PIN_SET -#define NOR_BUSY_STATE GPIO_PIN_RESET -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_NOR_Exported_Macro STM32469I EVAL NOR Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_NOR_Exported_Functions STM32469I EVAL NOR Exported Functions - * @{ - */ -uint8_t BSP_NOR_Init(void); -uint8_t BSP_NOR_DeInit(void); -uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_NOR_Erase_Chip(void); -uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID); -void BSP_NOR_ReturnToReadMode(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_NOR_MspInit(NOR_HandleTypeDef *hnor, void *Params); -uint8_t BSP_NOR_MspDeInit(NOR_HandleTypeDef *hnor, void *Params); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_NOR_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.c deleted file mode 100644 index 3e82930748..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.c +++ /dev/null @@ -1,1088 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_qspi.c - * @author MCD Application Team - * @brief This file includes a standard driver for the N25Q256A QSPI - * memory mounted on STM32469I-EVAL board. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - (#) This driver is used to drive the S25FL512SAGMFI01 and N25Q512A QSPI external - memory mounted on STM32469I-EVAL evaluation board. - - (#) This driver need a specific component driver (FL512SAGMFI01 and N25Q512A) to be included with. - - (#) Initialization steps: - (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This - function includes the MSP layer hardware resources initialization and the - QSPI interface with the external memory. - - (#) QSPI memory operations - (++) QSPI memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_QSPI_Read()/BSP_QSPI_Write(). - (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. - (see the QSPI memory data sheet) - (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_QSPI_Erase_Chip(). - (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. - (see the QSPI memory data sheet) - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_qspi.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I_EVAL_QSPI STM32469I EVAL QSPI - * @{ - */ - - -/* Private variables ---------------------------------------------------------*/ -#define JEDEC_MANUF_ID_MICRON ((uint8_t) 0x20) -#define JEDEC_MANUF_ID_SPANSION ((uint8_t) 0x01) -/** @defgroup STM32469I_EVAL_QSPI_Private_Variables STM32469I EVAL QSPI Private Variables - * @{ - */ -QSPI_HandleTypeDef QSPIHandle; -QSPI_InfoTypeDef QspiInfo; - -/** - * @} - */ - - - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup STM32469I_EVAL_QSPI_Private_Functions STM32469I EVAL QSPI Private Functions - * @{ - */ -static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_EnterFourBytesAddress(QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_AutoPollingMemReady (QSPI_HandleTypeDef *hqspi, uint32_t Timeout); -static uint8_t QSPI_ReadID (QSPI_InfoTypeDef *pqspi_info); - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_QSPI_Exported_Functions STM32469I EVAL QSPI Exported Functions - * @{ - */ - -/** - * @brief Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Init(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level initialization */ - BSP_QSPI_MspInit(&QSPIHandle, NULL); - - /* QSPI initialization */ - /* Init typedef is the same for both S25FL512S and N25Q512A memories, as they have the same FLASH size */ - QSPIHandle.Init.ClockPrescaler = 1; /* QSPI Freq= 180 MHz / (1+1) = 90 MHz */ - QSPIHandle.Init.FifoThreshold = 1; - QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; - QSPIHandle.Init.FlashSize = POSITION_VAL(S25FL512S_FLASH_SIZE) - 1; /* same size on both memory types */ - QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; /* Min 50ns for nonRead on both memory types */ - QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; - QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; - QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; - - if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Detect the memory ID */ - if (QSPI_ReadID(&QspiInfo) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* QSPI memory reset */ - if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Set the QSPI memory in 4-bytes address mode */ - if (QSPI_EnterFourBytesAddress(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Configuration of the dummy cucles on QSPI memory side */ - if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - return QSPI_OK; -} - -/** - * @brief De-Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_DeInit(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level De-initialization */ - BSP_QSPI_MspDeInit(&QSPIHandle, NULL); - - return QSPI_OK; -} - -/** - * @brief Reads an amount of data from the QSPI memory. - * @param pData: Pointer to data to be read - * @param ReadAddr: Read start address - * @param Size: Size of data to read - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the read command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_OUT_FAST_READ_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.Address = ReadAddr; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = QspiInfo.DummyCyclesRead; - s_command.NbData = Size; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Set S# timing for Read command: Min 20ns for N25Q512A memory and 10ns for S25FL512S memory */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Restore S# timing for nonRead commands */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); - - return QSPI_OK; -} - -/** - * @brief Writes an amount of data to the QSPI memory. - * @param pData: Pointer to data to be written - * @param WriteAddr: Write start address - * @param Size: Size of data to write - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - uint32_t end_addr, current_size, current_addr; - - /* Calculation of the size between the write address and the end of the page */ - current_size = QspiInfo.ProgPageSize - (WriteAddr % (QspiInfo.ProgPageSize)); - - /* Check if the size of the data is less than the remaining place in the page */ - if (current_size > Size) - { - current_size = Size; - } - - /* Initialize the address variables */ - current_addr = WriteAddr; - end_addr = WriteAddr + Size; - - /* Initialize the program command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_IN_FAST_PROG_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Perform the write page by page */ - do - { - s_command.Address = current_addr; - s_command.NbData = current_size; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of program */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update the address and size variables for next page programming */ - current_addr += current_size; - pData += current_size; - current_size = ((current_addr + QspiInfo.ProgPageSize) > end_addr) ? (end_addr - current_addr) : QspiInfo.ProgPageSize; - } while (current_addr < end_addr); - - return QSPI_OK; -} - -/** - * @brief Erases the specified block of the QSPI memory. - * @param BlockAddress: Block address to erase - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = SECTOR_ERASE_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.Address = BlockAddress; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, QspiInfo.SectorEraseMaxTime) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Erases the entire QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Chip(void) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = BULK_ERASE_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, QspiInfo.BulkEraseMaxTime) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Reads current status of the QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetStatus(void) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg1, reg2; - - if (QspiInfo.ManufID == QSPI_N25Q512A) - { - /* Initialize the read flag status register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_FLAG_STATUS_REG_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®1, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg1 & (N25Q512A_FSR_PRERR | N25Q512A_FSR_VPPERR | N25Q512A_FSR_PGERR | N25Q512A_FSR_ERERR)) != 0) - { - return QSPI_ERROR; - } - else if ((reg1 & (N25Q512A_FSR_PGSUS | N25Q512A_FSR_ERSUS)) != 0) - { - return QSPI_SUSPENDED; - } - else if ((reg1 & N25Q512A_FSR_READY) != 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } - } - else - { - /* Initialize the read flag status register1 command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = S25FL512S_READ_STATUS_REG1_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®1, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - - /* Initialize the read flag status register2 command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = S25FL512S_READ_STATUS_REG2_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®2, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg1 & (S25FL512S_SR1_ERERR | S25FL512S_SR1_PGERR | S25FL512S_SR1_SRWD )) != 0) - { - return QSPI_ERROR; - } - if ((reg1 & (S25FL512S_SR1_BP0 | S25FL512S_SR1_BP1 | S25FL512S_SR1_BP2)) != 0) - { - return QSPI_PROTECTED; - } - - if ((reg2 & (S25FL512S_SR2_PS | S25FL512S_SR2_ES)) != 0) - { - return QSPI_SUSPENDED; - } - if ((reg1 & (S25FL512S_SR1_WIP | S25FL512S_SR1_WREN)) == 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } - } -} - -/** - * @brief Reads the configuration of the memory and fills QspiInfo struct - * @param pInfo pointer to Info structure - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetInfo(QSPI_InfoTypeDef* pInfo) -{ - - if (QSPI_ReadID(pInfo) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** -* @brief Configure the QSPI in memory-mapped mode -* @retval QSPI memory status -*/ -uint8_t BSP_QSPI_EnableMemoryMappedMode(void) -{ - QSPI_CommandTypeDef s_command; - QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; - - /* Configure the command for the read instruction */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_OUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_32_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = QspiInfo.DummyCyclesRead; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the memory mapped mode */ - s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; - - if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @} - */ - -/** @addtogroup STM32469I_EVAL_QSPI_Private_Functions - * @{ - */ - -/** - * @brief QSPI MSP Initialization - * This function configures the hardware resources used in this example: - * - Peripheral's clock enable - * - Peripheral's GPIO Configuration - * - NVIC configuration for QSPI interrupt - */ -__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /*##-1- Enable peripherals and GPIO Clocks #################################*/ - /* Enable the QuadSPI memory interface clock */ - QSPI_CLK_ENABLE(); - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - /* Enable GPIO clocks */ - QSPI_CS_GPIO_CLK_ENABLE(); - QSPI_DX_CLK_GPIO_CLK_ENABLE(); - - /*##-2- Configure peripheral GPIO ##########################################*/ - /* QSPI CS GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CS_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); - - /* QSPI CLK GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CLK_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); - - /* QSPI D0 and D1 GPIO pin configuration */ - gpio_init_structure.Pin = (QSPI_D0_PIN | QSPI_D1_PIN); - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); - - /* QSPI D2 and D3 GPIO pin configuration */ - gpio_init_structure.Pin = (QSPI_D2_PIN | QSPI_D3_PIN) ; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_DX_GPIO_PORT, &gpio_init_structure); - - /*##-3- Configure the NVIC for QSPI #########################################*/ - /* NVIC configuration for QSPI interrupt */ - HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(QUADSPI_IRQn); - -} - -/** - * @brief QSPI MSP De-Initialization - * This function frees the hardware resources used in this example: - * - Disable the Peripheral's clock - * - Revert GPIO and NVIC configuration to their default state - */ -__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - /*##-1- Disable the NVIC for QSPI ###########################################*/ - HAL_NVIC_DisableIRQ(QUADSPI_IRQn); - - /*##-2- Disable peripherals and GPIO Clocks ################################*/ - /* De-Configure QSPI pins */ - HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN); - HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D0_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D1_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D2_PIN); - HAL_GPIO_DeInit(QSPI_DX_GPIO_PORT, QSPI_D3_PIN); - - /*##-3- Reset peripherals ##################################################*/ - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - - /* Disable the QuadSPI memory interface clock */ - QSPI_CLK_DISABLE(); -} - -/** - * @brief This function reset the QSPI memory. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint32_t instruction1, instruction2; - - /* Command ID differs between N25Q512A and S25FL512S memories */ - if (QspiInfo.ManufID == QSPI_N25Q512A) - { - instruction1 = RESET_ENABLE_CMD; - instruction2 = RESET_MEMORY_CMD; - } - else - { - instruction1 = S25FL512S_MODE_BIT_RESET_CMD; - instruction2 = S25FL512S_SOFTWARE_RESET_CMD; - } - - /* Initialize the Mode Bit Reset command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = instruction1; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Send the SW reset command */ - s_command.Instruction = instruction2; - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - return QSPI_OK; -} - -/** - * @brief This function set the QSPI memory in 4-byte address mode - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_EnterFourBytesAddress(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg1; - - /* Command ID differs between N25Q512A and S25FL512S memories */ - if (QspiInfo.ManufID == QSPI_N25Q512A) - { - /* Initialize the command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = ENTER_4_BYTE_ADDR_MODE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(hqspi) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; - } - else - { - /* Initialize the read bank register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = S25FL512S_READ_BANK_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®1, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update Bank address register (with 4byte addressing bit) */ - s_command.Instruction = S25FL512S_WRITE_BANK_REG_CMD; - MODIFY_REG(reg1, S25FL512S_BA_EXTADD, S25FL512S_BA_EXTADD); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data Status Register 1 */ - if (HAL_QSPI_Transmit(&QSPIHandle, ®1, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - return QSPI_OK; - } -} - -/** - * @brief This function configure the dummy cycles on memory side. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg[2]; - /* Command ID differs between N25Q512A and S25FL512S memories */ - if (QspiInfo.ManufID == QSPI_N25Q512A) - { - /* Initialize the read volatile configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_VOL_CFG_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(hqspi, ®[0], HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(hqspi) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update volatile configuration register (with new dummy cycles) */ - s_command.Instruction = WRITE_VOL_CFG_REG_CMD; - MODIFY_REG(reg[0], N25Q512A_VCR_NB_DUMMY, (N25Q512A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q512A_VCR_NB_DUMMY))); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(hqspi, ®[0], HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - } - else - { - /* Initialize the read configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = S25FL512S_READ_CONFIGURATION_REG1_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®[1], HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Initialize the read status register1 command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = S25FL512S_READ_STATUS_REG1_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®[0], HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update configuration register (with new Latency Code) */ - s_command.Instruction = S25FL512S_WRITE_STATUS_CMD_REG_CMD; - s_command.NbData = 2; - MODIFY_REG(reg[1], S25FL512S_CR1_LC_MASK, S25FL512S_CR1_LC1); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data Status Register 1 */ - if (HAL_QSPI_Transmit(&QSPIHandle, reg, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - } - return QSPI_OK; -} - -/** - * @brief This function send a Write Enable and wait it is effective. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef sConfig; - - /* Enable write operations */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = WRITE_ENABLE_CMD; /* equal on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for write enabling */ - sConfig.Match = S25FL512S_SR1_WREN; - sConfig.Mask = S25FL512S_SR1_WREN; /* equal on both memory types */ - sConfig.MatchMode = QSPI_MATCH_MODE_AND; - sConfig.StatusBytesSize = 1; - sConfig.Interval = 0x10; - sConfig.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - s_command.Instruction = READ_STATUS_REG_CMD; /* equal on both memory types */ - s_command.DataMode = QSPI_DATA_1_LINE; - - if (HAL_QSPI_AutoPolling(&QSPIHandle, &s_command, &sConfig, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function read the SR of the memory and wait the EOP. - * @param hqspi: QSPI handle - * @param Timeout: timeout value before returning an error - */ -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef sConfig; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_STATUS_REG_CMD; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - sConfig.Match = 0; - sConfig.Mask = S25FL512S_SR1_WIP; /* same value on both memory types */ - sConfig.MatchMode = QSPI_MATCH_MODE_AND; - sConfig.StatusBytesSize = 1; - sConfig.Interval = 0x10; - sConfig.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - if (HAL_QSPI_AutoPolling(&QSPIHandle, &s_command, &sConfig, Timeout) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function reads the ID of the QSPI Memory and fills the info struct - * @param pqspi_info: pointer to the Info Typedef structure - */ -static uint8_t QSPI_ReadID(QSPI_InfoTypeDef *pqspi_info) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg[6]; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_ID_CMD2; /* same value on both memory types */ - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.NbData = 6; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, reg, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the received ID of the QSPI Memory */ - if (reg[0] == JEDEC_MANUF_ID_MICRON) - { - pqspi_info->ManufID = QSPI_N25Q512A; - pqspi_info->FlashSize = (reg[2]<<21) & 0xFFFFFFFF; - pqspi_info->EraseSectorSize = N25Q512A_SECTOR_SIZE; - pqspi_info->EraseSectorsNumber = (N25Q512A_FLASH_SIZE/N25Q512A_SECTOR_SIZE); - pqspi_info->ProgPageSize = N25Q512A_PAGE_SIZE; - pqspi_info->ProgPagesNumber = (N25Q512A_FLASH_SIZE/N25Q512A_PAGE_SIZE); - pqspi_info->DummyCyclesRead = 10; - pqspi_info->SectorEraseMaxTime = N25Q512A_SECTOR_ERASE_MAX_TIME; - pqspi_info->BulkEraseMaxTime = N25Q512A_BULK_ERASE_MAX_TIME; - } - if (reg[0] == JEDEC_MANUF_ID_SPANSION) - { - pqspi_info->ManufID = QSPI_S25FL512S; - pqspi_info->FlashSize = (reg[2]<<21) & 0xFFFFFFFF; - pqspi_info->EraseSectorSize = S25FL512S_SECTOR_SIZE; - pqspi_info->EraseSectorsNumber = (S25FL512S_FLASH_SIZE/S25FL512S_SECTOR_SIZE); - pqspi_info->ProgPageSize = S25FL512S_PAGE_SIZE; - pqspi_info->ProgPagesNumber = (S25FL512S_FLASH_SIZE/S25FL512S_PAGE_SIZE); - pqspi_info->DummyCyclesRead = 8; - pqspi_info->SectorEraseMaxTime = S25FL512S_SECTOR_ERASE_MAX_TIME; - pqspi_info->BulkEraseMaxTime = S25FL512S_BULK_ERASE_MAX_TIME; - } - - return QSPI_OK; - -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.h deleted file mode 100644 index 1187bff4bf..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_qspi.h +++ /dev/null @@ -1,153 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_qspi.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_qspi.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2015 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_QSPI_H -#define __STM32469I_EVAL_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "../Components/s25fl512s/s25fl512s.h" -#include "../Components/n25q512a/n25q512a.h" - - -/** @addtogroup STM32469I_EVAL_QSPI - * @{ - */ - - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup STM32446E_EVAL_QSPI_Exported_Constants STM32469I EVAL QSPI Exported Constants - * @{ - */ -/* QSPI Error codes */ -#define QSPI_OK ((uint8_t)0x00) -#define QSPI_ERROR ((uint8_t)0x01) -#define QSPI_BUSY ((uint8_t)0x02) -#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) -#define QSPI_SUSPENDED ((uint8_t)0x08) -#define QSPI_PROTECTED ((uint8_t)0x10) - -#define QSPI_S25FL512S ((uint8_t)0x20) -#define QSPI_N25Q512A ((uint8_t)0x40) - -/* Definition for QSPI clock resources */ -#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() -#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() -#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define QSPI_DX_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_DX_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() -#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() - -/* Definition for QSPI Pins */ -#define QSPI_CS_PIN GPIO_PIN_6 -#define QSPI_CS_GPIO_PORT GPIOB -#define QSPI_CLK_PIN GPIO_PIN_10 -#define QSPI_CLK_GPIO_PORT GPIOF -#define QSPI_D0_PIN GPIO_PIN_8 -#define QSPI_D1_PIN GPIO_PIN_9 -#define QSPI_D2_PIN GPIO_PIN_7 -#define QSPI_D3_PIN GPIO_PIN_6 -#define QSPI_DX_GPIO_PORT GPIOF - - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup STM32446E_EVAL_QSPI_Exported_Types STM32469I EVAL QSPI Exported Types - * @{ - */ -/** - * @brief QSPI Info - * */ -typedef struct { - uint32_t FlashSize; /*!< Size of the flash */ - uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ - uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ - uint32_t ProgPageSize; /*!< Size of pages for the program operation */ - uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ - uint32_t DummyCyclesRead; /*!< Number of dummy read cycles */ - uint8_t ManufID; /*!< Manufacturor value */ - uint32_t SectorEraseMaxTime; /*!< Sector Erase max value */ - uint32_t BulkEraseMaxTime; /*!< Bulk Erase Max Time */ -} QSPI_InfoTypeDef; - -/** - * @} - */ - - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup STM32469I_EVAL_QSPI_Exported_Functions STM32469I EVAL QSPI Exported Functions - * @{ - */ -uint8_t BSP_QSPI_Init (void); -uint8_t BSP_QSPI_DeInit (void); -uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); -uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_QSPI_Erase_Chip (void); -uint8_t BSP_QSPI_GetStatus (void); -uint8_t BSP_QSPI_GetInfo (QSPI_InfoTypeDef* pInfo); -uint8_t BSP_QSPI_EnableMemoryMappedMode(void); -/* BSP Aliased function maintained for legacy purpose */ -#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); -void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32446E_EVAL_QSPI_H */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.c deleted file mode 100644 index 4200284ae7..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.c +++ /dev/null @@ -1,578 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM32469I-EVAL - * evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM32469I-EVAL - evaluation board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the evaluation board. - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_SD STM32469I EVAL SD - * @{ - */ - - -/** @defgroup STM32469I-EVAL_SD_Private_TypesDefinitions STM32469I EVAL SD Private TypesDef - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Private_Defines STM32469I EVAL SD Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Private_Macros STM32469I EVAL SD Private Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Private_Variables STM32469I EVAL SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; -static uint8_t UseExtiModeDetection = 0; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Private_FunctionPrototypes STM32469I EVAL SD Private Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Private_Functions STM32469I EVAL SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t sd_state = MSD_OK; - - /* PLLSAI is dedicated to LCD periph. Do not use it to get 48MHz*/ - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Configure IO functionalities for SD detect pin */ - BSP_IO_Init(); - - /* Check if the SD card is plugged in the slot */ - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_INPUT_PU); - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR_SD_NOT_PRESENT; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - /* HAL SD initialization */ - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(sd_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - sd_state = MSD_ERROR; - } - else - { - sd_state = MSD_OK; - } - } - return sd_state; -} - -/** - * @brief DeInitializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_DeInit(void) -{ - uint8_t sd_state = MSD_OK; - - uSdHandle.Instance = SDIO; - - /* Set back Mfx pin to INPUT mode in case it was in exti */ - UseExtiModeDetection = 0; - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_INPUT_PU); - - /* HAL SD deinitialization */ - if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Msp SD deinitialization */ - uSdHandle.Instance = SDIO; - BSP_SD_MspDeInit(&uSdHandle, NULL); - - return sd_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns 0 - */ -uint8_t BSP_SD_ITConfig(void) -{ - /* Configure Interrupt mode for SD detection pin */ - /* Note: disabling exti mode can be done calling SD_DeInit() */ - UseExtiModeDetection = 1; - BSP_SD_IsDetected(); - - return 0; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if((BSP_IO_ReadPin(SD_DETECT_PIN)&SD_DETECT_PIN) != SD_DETECT_PIN) - { - if (UseExtiModeDetection) - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_RISING_EDGE_PU); - - } - else - { - status = SD_NOT_PRESENT; - if (UseExtiModeDetection) - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_FALLING_EDGE_PU); - } - - return status; -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* SD pins are in conflict with Camera pins therefore Camera is power down */ - /* __weak function can be modified by the application */ - BSP_IO_ConfigPin(RSTI_PIN, IO_MODE_OUTPUT); - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - /* De-assert the camera STANDBY pin (active high) */ - BSP_IO_WritePin(XSDN_PIN, BSP_IO_PIN_RESET); - /* Assert the camera RSTI pin (active low) */ - BSP_IO_WritePin(RSTI_PIN, BSP_IO_PIN_RESET); - HAL_Delay(100); - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_rx_handle.Init.Mode = DMA_PFCTRL; - dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_rx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_rx_handle); - - /* Configure DMA Tx parameters */ - dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_tx_handle.Init.Mode = DMA_PFCTRL; - dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_tx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_tx_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief DeInitializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - - /* Disable NVIC for DMA transfer complete interrupts */ - HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); - HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - HAL_DMA_DeInit(&dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - HAL_DMA_DeInit(&dma_tx_handle); - - /* Disable NVIC for SDIO interrupts */ - HAL_NVIC_DisableIRQ(SDIO_IRQn); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* Disable SDIO clock */ - __HAL_RCC_SDIO_CLK_DISABLE(); - - /* GPOI pins clock and DMA cloks can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - * @retval None - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - * @retval None - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.h deleted file mode 100644 index 455ab7fd4d..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sd.h +++ /dev/null @@ -1,144 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_SD_H -#define __STM32469I_EVAL_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" -#include "stm32469i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_SD STM32469I EVAL SD - * @{ - */ - -/** @defgroup STM32469I-EVAL_SD_Exported_Types STM32469I EVAL SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) -#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - -/** @defgroup STM32469I-EVAL_SD_Exported_Constants STM32469I EVAL SD Exported Constants - * @{ - */ -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8) -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Exported_Macro STM32469I EVAL SD Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SD_Exported_Functions STM32469I EVAL SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_SD_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.c deleted file mode 100644 index 920c9ca9bc..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.c +++ /dev/null @@ -1,503 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sdram.c - * @author MCD Application Team - * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory - * device mounted on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted - on STM32469I-EVAL evaluation board. - - This driver does not need a specific component driver for the SDRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SDRAM memory. - o It contains the SDRAM initialization sequence to program the SDRAM external - device using the function BSP_SDRAM_Initialization_sequence(). Note that this - sequence is standard for all SDRAM devices, but can include some differences - from a device to another. If it is the case, the right sequence should be - implemented separately. - - + SDRAM read/write operations - o SDRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions - BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA(). - o The AHB access is performed with 32-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) word transfer (see the - BSP_SDRAM_MspInit() weak function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - o You can send a command to the SDRAM device in runtime using the function - BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between - the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_sdram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_SDRAM STM32469I EVAL SDRAM - * @{ - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Types_Definitions STM32469I EVAL SDRAM Private TypesDef - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Defines STM32469I EVAL SDRAM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Macros STM32469I EVAL SDRAM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Variables STM32469I EVAL SDRAM Private Variables - * @{ - */ -static SDRAM_HandleTypeDef sdramHandle; -static FMC_SDRAM_TimingTypeDef Timing; -static FMC_SDRAM_CommandTypeDef Command; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Function_Prototypes STM32469I EVAL SDRAM Private Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Private_Functions STM32469I EVAL SDRAM Private Functions - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I_EVAL_SDRAM_Exported_Functions STM32469I EVAL SDRAM Exported Functions - * @{ - */ - -/** - * @brief Initializes the SDRAM device. - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_Init(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - /* Timing configuration for 90 MHz as SD clock frequency (System clock is up to 180 MHz) */ - Timing.LoadToActiveDelay = 2; /* TMRD: 2 Clock cycles */ - Timing.ExitSelfRefreshDelay = 7; /* TXSR: min=70ns (7x11.11ns) */ - Timing.SelfRefreshTime = 4; /* TRAS: min=42ns (4x11.11ns) max=120k (ns) */ - Timing.RowCycleDelay = 7; /* TRC: min=70 (7x11.11ns) */ - Timing.WriteRecoveryTime = 2; /* TWR: min=1+ 7ns (1+1x11.11ns) */ - Timing.RPDelay = 2; /* TRP: 20ns => 2x11.11ns */ - Timing.RCDDelay = 2; /* TRCD: 20ns => 2x11.11ns */ - - sdramHandle.Init.SDBank = FMC_SDRAM_BANK1; - sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9; - sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; - sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; - sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; - sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; - sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; - sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; - sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; - - /* SDRAM controller initialization */ - /* __weak function can be surcharged by the application code */ - BSP_SDRAM_MspInit(&sdramHandle, (void *)NULL); - if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM initialization sequence */ - BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); - - return sdramstatus; -} - -/** - * @brief DeInitializes the SDRAM device. - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_DeInit(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - if(HAL_SDRAM_DeInit(&sdramHandle) == HAL_OK) - { - sdramstatus = SDRAM_OK; - - /* SDRAM controller De-initialization */ - BSP_SDRAM_MspDeInit(&sdramHandle, (void *)NULL); - } - - return sdramstatus; -} - - -/** - * @brief Programs the SDRAM device. - * @param RefreshCount: SDRAM refresh counter value - */ -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) -{ - __IO uint32_t tmpmrd = 0; - - /* Step 1: Configure a clock configuration enable command */ - Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 2: Insert 100 us minimum delay */ - /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ - HAL_Delay(1); - - /* Step 3: Configure a PALL (precharge all) command */ - Command.CommandMode = FMC_SDRAM_CMD_PALL; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 4: Configure an Auto Refresh command */ - Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 8; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 5: Program the external memory mode register */ - tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\ - SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\ - SDRAM_MODEREG_CAS_LATENCY_3 |\ - SDRAM_MODEREG_OPERATING_MODE_STANDARD |\ - SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; - - Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = tmpmrd; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 6: Set the refresh rate counter */ - /* Set the device refresh rate */ - HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); -} - -/** - * @brief Reads an mount of data from the SDRAM memory in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Reads an mount of data from the SDRAM memory in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Sends command to the SDRAM bank. - * @param SdramCmd: Pointer to SDRAM command structure - * @retval HAL status : SDRAM_OK or SDRAM_ERROR. - */ -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) -{ - if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Handles SDRAM DMA transfer interrupt request. - */ -void BSP_SDRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sdramHandle.hdma); -} - -/** - * @brief Initializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - GPIO_InitTypeDef gpio_init_structure; - - if(hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - __HAL_RCC_GPIOH_CLK_ENABLE(); - __HAL_RCC_GPIOI_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8| GPIO_PIN_9 | GPIO_PIN_10 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); - - /* GPIOH configuration */ - gpio_init_structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOH, &gpio_init_structure); - - /* GPIOI configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9 | GPIO_PIN_10; - HAL_GPIO_Init(GPIOI, &gpio_init_structure); - - /* Configure common DMA parameters */ - dma_handle.Init.Channel = SDRAM_DMAx_CHANNEL; - dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; - dma_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_handle.Init.Mode = DMA_NORMAL; - dma_handle.Init.Priority = DMA_PRIORITY_HIGH; - dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; - dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dma_handle.Instance = SDRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsdram, hdma, dma_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); - - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @brief DeInitializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - - if(hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_handle.Instance = SDRAM_DMAx_STREAM; - HAL_DMA_DeInit(&dma_handle); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ - - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.h deleted file mode 100644 index 90a61186c7..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sdram.h +++ /dev/null @@ -1,151 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sdram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_sdram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_SDRAM_H -#define __STM32469I_EVAL_SDRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I-EVAL_SDRAM - * @{ - */ - -/** @defgroup STM32469I-EVAL_SDRAM_Exported_Types STM32469I EVAL SDRAM Exported Types - * @{ - */ - -/** - * @} - */ - -/** - * @brief SDRAM status structure definition - */ -#define SDRAM_OK ((uint8_t)0x00) -#define SDRAM_ERROR ((uint8_t)0x01) - -/** @defgroup STM32469I-EVAL_SDRAM_Exported_Constants STM32469I EVAL SDRAM Exported Constants - * @{ - */ -#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000) - - /* SDRAM device size in Bytes */ - #define SDRAM_DEVICE_SIZE ((uint32_t)0x2000000) - -#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_32 -#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2 - -/* SDRAM refresh counter (90 MHz SD clock) */ -#define REFRESH_COUNT ((uint32_t)0x0569) -#define SDRAM_TIMEOUT ((uint32_t)0xFFFF) - -/* DMA definitions for SDRAM DMA transfer */ -#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define __DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE -#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SDRAM_DMAx_STREAM DMA2_Stream0 -#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler -/** - * @} - */ - -/** - * @brief FMC SDRAM Mode definition register defines - */ -#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) -#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) -#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) -#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) -#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) -#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) -#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) - -/** @defgroup STM32469I-EVAL_SDRAM_Exported_Macro STM32469I EVAL SDRAM Exported Macro - * @{ - */ -/** - * @} - */ - -/** @addtogroup STM32469I_EVAL_SDRAM_Exported_Functions - * @{ - */ -uint8_t BSP_SDRAM_Init(void); -uint8_t BSP_SDRAM_DeInit(void); -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount); -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd); -void BSP_SDRAM_DMA_IRQHandler(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params); -void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_SDRAM_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.c deleted file mode 100644 index 9097ab78be..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.c +++ /dev/null @@ -1,398 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sram.c - * @author MCD Application Team - * @brief This file includes the SRAM driver for the IS61WV102416BLL-10M memory - * device mounted on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IS61WV102416BLL-10M SRAM external memory mounted - on STM32469I-EVAL evaluation board. - - This driver does not need a specific component driver for the SRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SRAM external memory using the BSP_SRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SRAM memory. - - + SRAM read/write operations - o SRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SRAM_ReadData()/BSP_SRAM_WriteData(), or by DMA transfer using the functions - BSP_SRAM_ReadData_DMA()/BSP_SRAM_WriteData_DMA(). - o The AHB access is performed with 16-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) halfword transfer - (see the BSP_SRAM_MspInit() __weak function). This function BSP_SRAM_MspInit() - can be surcharged by application code above BSP. - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval_sram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_SRAM STM32469I EVAL SRAM - * @{ - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Types_Definitions STM32469I EVAL SRAM Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Defines STM32469I EVAL SRAM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Macros STM32469I EVAL SRAM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Variables STM32469I EVAL SRAM Private Variables - * @{ - */ -static SRAM_HandleTypeDef sramHandle; -static FMC_NORSRAM_TimingTypeDef Timing; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Function_Prototypes STM32469I EVAL SRAM Private Function Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Private_Functions STM32469I EVAL SRAM Private Functions - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Exported_Functions STM32469I EVAL SRAM Exported Functions - * @{ - */ - -/** - * @brief Initializes the SRAM device. - * @retval SRAM status - */ -uint8_t BSP_SRAM_Init(void) -{ - sramHandle.Instance = FMC_NORSRAM_DEVICE; - sramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - /* SRAM device configuration */ - Timing.AddressSetupTime = 2; - Timing.AddressHoldTime = 1; - Timing.DataSetupTime = 2; - Timing.BusTurnAroundDuration = 1; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FMC_ACCESS_MODE_A; - - sramHandle.Init.NSBank = FMC_NORSRAM_BANK2; - sramHandle.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - sramHandle.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; - sramHandle.Init.MemoryDataWidth = SRAM_MEMORY_WIDTH; - sramHandle.Init.BurstAccessMode = SRAM_BURSTACCESS; - sramHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - sramHandle.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - sramHandle.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - sramHandle.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - sramHandle.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; - sramHandle.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - sramHandle.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; - sramHandle.Init.WriteBurst = SRAM_WRITEBURST; - sramHandle.Init.ContinuousClock = CONTINUOUSCLOCK_FEATURE; - - /* SRAM controller initialization */ - /* __weak function can be surcharged by the application code */ - BSP_SRAM_MspInit(&sramHandle, (void*)NULL); - if(HAL_SRAM_Init(&sramHandle, &Timing, &Timing) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief DeInitializes the SRAM device. - * @retval SRAM status : SRAM_OK or SRAM_ERROR. - */ -uint8_t BSP_SRAM_DeInit(void) -{ - static uint8_t sramstatus = SRAM_ERROR; - - /* SRAM device configuration */ - sramHandle.Instance = FMC_NORSRAM_DEVICE; - - if(HAL_SRAM_DeInit(&sramHandle) == HAL_OK) - { - sramstatus = SRAM_OK; - - /* SRAM controller De-initialization */ - BSP_SRAM_MspDeInit(&sramHandle, (void *)NULL); - } - - return sramstatus; -} - -/** - * @brief Reads an amount of data from the SRAM device in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status : SRAM_OK or SRAM_ERROR. - */ -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status : SRAM_OK or SRAM_ERROR. - */ -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status : SRAM_OK or SRAM_ERROR. - */ -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status : SRAM_OK or SRAM_ERROR. - */ -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Handles SRAM DMA transfer interrupt request. - */ -void BSP_SRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sramHandle.hdma); -} - -/** - * @brief Initializes SRAM MSP. - * @note This function can be surcharged by application code. - * @param hsram : pointer on SRAM handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SRAM_MspInit(SRAM_HandleTypeDef *hsram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - GPIO_InitTypeDef gpio_init_structure; - - if(hsram != (SRAM_HandleTypeDef *)NULL) - { - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __SRAM_DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ - GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_9; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); - - /* Configure common DMA parameters */ - dma_handle.Init.Channel = SRAM_DMAx_CHANNEL; - dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; - dma_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - dma_handle.Init.Mode = DMA_NORMAL; - dma_handle.Init.Priority = DMA_PRIORITY_HIGH; - dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; - dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dma_handle.Instance = SRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsram, hdma, dma_handle); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&dma_handle); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&dma_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SRAM_DMAx_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(SRAM_DMAx_IRQn); - - } /* of if(hsram != (SRAM_HandleTypeDef *)NULL) */ -} - -/** - * @brief DeInitializes SRAM MSP. - * @note This function can be surcharged by application code. - * @param hsram : pointer on SRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SRAM_MspDeInit(SRAM_HandleTypeDef *hsram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - - if(hsram != (SRAM_HandleTypeDef *)NULL) - { - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(SRAM_DMAx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_handle.Instance = SRAM_DMAx_STREAM; - HAL_DMA_DeInit(&dma_handle); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ - - } /* of if(hsram != (SRAM_HandleTypeDef *)NULL) */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.h deleted file mode 100644 index e8eefdcfcd..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_sram.h +++ /dev/null @@ -1,122 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_sram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_sram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_SRAM_H -#define __STM32469I_EVAL_SRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @addtogroup STM32469I-EVAL_SRAM - * @{ - */ - -/** @defgroup STM32469I-EVAL_SRAM_Exported_Types STM32469I EVAL SRAM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Exported_Constants STM32469I EVAL SRAM Exported Constants - * @{ - */ - -#define SRAM_OK ((uint8_t)0x00) -#define SRAM_ERROR ((uint8_t)0x01) - -#define SRAM_DEVICE_ADDR ((uint32_t)0x64000000) - - /* SRAM device size in Bytes */ -#define SRAM_DEVICE_SIZE ((uint32_t)0x200000) - -#define SRAM_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_16 -#define SRAM_BURSTACCESS FMC_BURST_ACCESS_MODE_DISABLE -#define SRAM_WRITEBURST FMC_WRITE_BURST_DISABLE -#define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ONLY - -/* DMA definitions for SRAM DMA transfer */ -#define __SRAM_DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define __SRAM_DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE -#define SRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SRAM_DMAx_STREAM DMA2_Stream4 -#define SRAM_DMAx_IRQn DMA2_Stream4_IRQn -#define SRAM_DMAx_IRQHandler DMA2_Stream4_IRQHandler -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_SRAM_Exported_Macro STM32469I EVAL SRAM Exported Macro - * @{ - */ -/** - * @} - */ - -/** @addtogroup STM32469I-EVAL_SRAM_Exported_Functions - * @{ - */ -uint8_t BSP_SRAM_Init(void); -uint8_t BSP_SRAM_DeInit(void); -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -void BSP_SRAM_DMA_IRQHandler(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SRAM_MspInit(SRAM_HandleTypeDef *hsram, void *Params); -void BSP_SRAM_MspDeInit(SRAM_HandleTypeDef *hsram, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_SRAM_H */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.c b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.c deleted file mode 100644 index e5aba7f297..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.c +++ /dev/null @@ -1,476 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM32469I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM32469I-EVAL - evaluation board on the K.O.D Optica Technology 480x800 TFT-LCD mounted on - MB1166 daughter board. The touch screen driver IC inside the K.O.D module KM-040TMP-02 - is a FT6206 by Focal Tech. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - The interrupt mode internally uses the IO functionalities driver driven by - the IO expander, to configure the IT line. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. - o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get - the interrupt status. To clear the IT pending bits, you should call the - function BSP_TS_ITClear(). - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" -#include "stm32469i_eval_ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_TS STM32469I EVAL TS - * @{ - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Types_Definitions STM32469I EVAL TS Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Defines STM32469I EVAL TS Private Types Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Macros STM32469I EVAL TS Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Imported_Variables STM32469I EVAL TS Imported Variables - * @{ - */ - /** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Variables STM32469I EVAL TS Private Variables - * @{ - */ -static TS_DrvTypeDef *ts_driver; -static uint8_t ts_orientation; -uint8_t I2C_Address = 0; - -/* Table for touchscreen event information display on LCD : table indexed on enum @ref TS_TouchEventTypeDef information */ -char * ts_event_string_tab[TOUCH_EVENT_NB_MAX] = { "None", - "Press down", - "Lift up", - "Contact" - }; - -/* Table for touchscreen gesture Id information display on LCD : table indexed on enum @ref TS_GestureIdTypeDef information */ -char * ts_gesture_id_string_tab[GEST_ID_NB_MAX] = { "None", - "Move Up", - "Move Right", - "Move Down", - "Move Left", - "Zoom In", - "Zoom Out" - }; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Function_Prototypes STM32469I EVAL TS Private Function Prototypes - * @{ - */ - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Public_Functions STM32469I EVAL TS Public Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..). - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY) -{ - uint8_t ts_status = TS_OK; - uint8_t ts_id1, ts_id2 = 0; - /* Note : I2C_Address is un-initialized here, but is not used at all in init function */ - /* but the prototype of Init() is like that in template and should be respected */ - - /* Initialize the communication channel to sensor (I2C) if necessary */ - /* that is initialization is done only once after a power up */ - ft6x06_ts_drv.Init(I2C_Address); - - ts_id1 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS); - if(ts_id1 != FT6206_ID_VALUE) - { - ts_id2 = ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS_A02); - I2C_Address = TS_I2C_ADDRESS_A02; - } - else - { - I2C_Address = TS_I2C_ADDRESS; - } - - /* Scan FT6xx6 TouchScreen IC controller ID register by I2C Read */ - /* Verify this is a FT6206 or FT6336G, otherwise this is an error case */ - if((ts_id1 == FT6206_ID_VALUE) || (ts_id2 == FT6x36_ID_VALUE)) - { - /* Found FT6206 : Initialize the TS driver structure */ - ts_driver = &ft6x06_ts_drv; - - /* Get LCD chosen orientation */ - if(ts_SizeX < ts_SizeY) - { - ts_orientation = TS_SWAP_NONE; - } - else - { - ts_orientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - ts_driver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - ts_driver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } - else - { - ts_status = TS_DEVICE_NOT_FOUND; - } - - return (ts_status); -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - uint8_t ts_status = TS_ERROR; - uint8_t io_status = IO_ERROR; - - /* Initialize the IO */ - io_status = BSP_IO_Init(); - if(io_status != IO_OK) - { - return (ts_status); - } - - /* Configure TS IT line IO : is active low on FT6206 (see data sheet) */ - /* Configure TS_INT_PIN (MFX_IO_14) low level to generate MFX_IRQ_OUT in EXTI on MCU */ - /* This will call HAL_GPIO_EXTI_Callback() that is setting variable 'mfx_exti_received' to 1b1' */ - io_status = BSP_IO_ConfigPin(TS_INT_PIN, IO_MODE_IT_LOW_LEVEL_PU); - if(io_status != IO_OK) - { - return (ts_status); - } - - /* Enable the TS in interrupt mode */ - /* In that case the INT output of FT6206 when new touch is available */ - /* is active low and directed on MFX IO14 */ - ts_driver->EnableIT(I2C_Address); - - /* If arrived here : set good status on exit */ - ts_status = TS_OK; - - return (ts_status); -} - -/** - * @brief Gets the touch screen interrupt status. - * @retval TS_IRQ_PENDING if touchscreen IRQ is pending, TS_NO_IRQ_PENDING when no IRQ TS is pending. - */ -uint8_t BSP_TS_ITGetStatus(void) -{ - uint8_t itStatus = TS_NO_IRQ_PENDING; /* By default no IRQ TS pending */ - uint32_t mfx_irq_status = 0; /* No MFX IRQ by default */ - - /* Check status of MFX_IO14 in particular which is the Touch Screen INT pin active low */ - mfx_irq_status = BSP_IO_ITGetStatus(TS_INT_PIN); - if(mfx_irq_status != 0) /* Note : returned mfx_irq_status = 0x4000 == (1<touchDetected = ts_driver->DetectTouch(I2C_Address); - if(TS_State->touchDetected) - { - for(index=0; index < TS_State->touchDetected; index++) - { - /* Get each touch coordinates */ - ts_driver->GetXY(I2C_Address, &(Raw_x[index]), &(Raw_y[index])); - - if(ts_orientation & TS_SWAP_XY) - { - tmp = Raw_x[index]; - Raw_x[index] = Raw_y[index]; - Raw_y[index] = tmp; - } - - if(ts_orientation & TS_SWAP_X) - { - Raw_x[index] = FT_6206_MAX_WIDTH - 1 - Raw_x[index]; - } - - if(ts_orientation & TS_SWAP_Y) - { - Raw_y[index] = FT_6206_MAX_HEIGHT - 1 - Raw_y[index]; - } - - xDiff = Raw_x[index] > _x[index]? (Raw_x[index] - _x[index]): (_x[index] - Raw_x[index]); - yDiff = Raw_y[index] > _y[index]? (Raw_y[index] - _y[index]): (_y[index] - Raw_y[index]); - - if ((xDiff + yDiff) > 5) - { - _x[index] = Raw_x[index]; - _y[index] = Raw_y[index]; - } - - - TS_State->touchX[index] = _x[index]; - TS_State->touchY[index] = _y[index]; - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - - /* Get touch info related to the current touch */ - ft6x06_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event); - - /* Update TS_State structure */ - TS_State->touchWeight[index] = weight; - TS_State->touchArea[index] = area; - - /* Remap touch event */ - switch(event) - { - case FT6206_TOUCH_EVT_FLAG_PRESS_DOWN : - TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; - break; - case FT6206_TOUCH_EVT_FLAG_LIFT_UP : - TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; - break; - case FT6206_TOUCH_EVT_FLAG_CONTACT : - TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; - break; - case FT6206_TOUCH_EVT_FLAG_NO_EVENT : - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(event) */ - -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* of for(index=0; index < TS_State->touchDetected; index++) */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - /* Get gesture Id */ - ts_status = BSP_TS_Get_GestureId(TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* end of if(TS_State->touchDetected != 0) */ - - return (ts_status); -} - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Update gesture Id following a touch detected. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State) -{ - uint32_t gestureId = 0; - uint8_t ts_status = TS_OK; - - /* Get gesture Id */ - ft6x06_TS_GetGestureID(I2C_Address, &gestureId); - - /* Remap gesture Id to a TS_GestureIdTypeDef value */ - switch(gestureId) - { - case FT6206_GEST_ID_NO_GESTURE : - TS_State->gestureId = GEST_ID_NO_GESTURE; - break; - case FT6206_GEST_ID_MOVE_UP : - TS_State->gestureId = GEST_ID_MOVE_UP; - break; - case FT6206_GEST_ID_MOVE_RIGHT : - TS_State->gestureId = GEST_ID_MOVE_RIGHT; - break; - case FT6206_GEST_ID_MOVE_DOWN : - TS_State->gestureId = GEST_ID_MOVE_DOWN; - break; - case FT6206_GEST_ID_MOVE_LEFT : - TS_State->gestureId = GEST_ID_MOVE_LEFT; - break; - case FT6206_GEST_ID_ZOOM_IN : - TS_State->gestureId = GEST_ID_ZOOM_IN; - break; - case FT6206_GEST_ID_ZOOM_OUT : - TS_State->gestureId = GEST_ID_ZOOM_OUT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(gestureId) */ - - return(ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - -/** - * @brief Clears all touch screen interrupts. - */ -void BSP_TS_ITClear(void) -{ - /* Clear TS_INT_PIN IRQ in MFX */ - BSP_IO_ITClearPin(TS_INT_PIN); -} - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Private_Functions STM32469I EVAL TS Private Functions - * @{ - */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Function used to reset all touch data before a new acquisition - * of touch information. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if OK, TE_ERROR if problem found. - */ -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State) -{ - uint8_t ts_status = TS_ERROR; - uint32_t index; - - if (TS_State != (TS_StateTypeDef *)NULL) - { - TS_State->gestureId = GEST_ID_NO_GESTURE; - TS_State->touchDetected = 0; - - for(index = 0; index < TS_MAX_NB_TOUCH; index++) - { - TS_State->touchX[index] = 0; - TS_State->touchY[index] = 0; - TS_State->touchArea[index] = 0; - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - TS_State->touchWeight[index] = 0; - } - - ts_status = TS_OK; - - } /* of if (TS_State != (TS_StateTypeDef *)NULL) */ - - return (ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.h b/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.h deleted file mode 100644 index 5e715c5a7a..0000000000 --- a/Drivers/BSP/STM32469I_EVAL/stm32469i_eval_ts.h +++ /dev/null @@ -1,191 +0,0 @@ -/** - ****************************************************************************** - * @file stm32469i_eval_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32469i_eval_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32469I_EVAL_TS_H -#define __STM32469I_EVAL_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32469i_eval.h" -#include "stm32469i_eval_lcd.h" -#include "stm32469i_eval_io.h" - -/* Include TouchScreen component driver */ -#include "../Components/ft6x06/ft6x06.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32469I_EVAL - * @{ - */ - -/** @defgroup STM32469I-EVAL_TS STM32469I EVAL TS - * @{ - */ - - /** @defgroup STM32469I-EVAL_TS_Exported_Constants STM32469I EVAL TS Exported Constants - * @{ - */ -/** @brief With FT6206 : maximum 2 touches detected simultaneously - */ -#define TS_MAX_NB_TOUCH ((uint32_t) FT6206_MAX_DETECTABLE_TOUCH) - -#define TS_NO_IRQ_PENDING ((uint8_t) 0) -#define TS_IRQ_PENDING ((uint8_t) 1) - -#define TS_SWAP_NONE ((uint8_t) 0x01) -#define TS_SWAP_X ((uint8_t) 0x02) -#define TS_SWAP_Y ((uint8_t) 0x04) -#define TS_SWAP_XY ((uint8_t) 0x08) - - /** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Exported_Types STM32469I EVAL TS Exported Types - * @{ - */ -/** -* @brief TS_StateTypeDef -* Define TS State structure -*/ -typedef struct -{ - uint8_t touchDetected; /*!< Total number of active touches detected at last scan */ - uint16_t touchX[TS_MAX_NB_TOUCH]; /*!< Touch X[0], X[1] coordinates on 12 bits */ - uint16_t touchY[TS_MAX_NB_TOUCH]; /*!< Touch Y[0], Y[1] coordinates on 12 bits */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint8_t touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */ - uint8_t touchEventId[TS_MAX_NB_TOUCH]; /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */ - uint8_t touchArea[TS_MAX_NB_TOUCH]; /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */ - uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */ -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -} TS_StateTypeDef; - -/** - * @brief TS_StatusTypeDef - * Define BSP_TS_xxx() functions possible return value, - * when status is returned by those functions. - */ -typedef enum -{ - TS_OK = 0x00, /*!< Touch Ok */ - TS_ERROR = 0x01, /*!< Touch Error */ - TS_TIMEOUT = 0x02, /*!< Touch Timeout */ - TS_DEVICE_NOT_FOUND = 0x03 /*!< Touchscreen device not found */ -} TS_StatusTypeDef; - -/** - * @brief TS_GestureIdTypeDef - * Define Possible managed gesture identification values returned by touch screen - * driver. - */ -typedef enum -{ - GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */ - GEST_ID_MOVE_UP = 0x01, /*!< Gesture Move Up */ - GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */ - GEST_ID_MOVE_DOWN = 0x03, /*!< Gesture Move Down */ - GEST_ID_MOVE_LEFT = 0x04, /*!< Gesture Move Left */ - GEST_ID_ZOOM_IN = 0x05, /*!< Gesture Zoom In */ - GEST_ID_ZOOM_OUT = 0x06, /*!< Gesture Zoom Out */ - GEST_ID_NB_MAX = 0x07 /*!< max number of gesture id */ -} TS_GestureIdTypeDef; - -/** - * @brief TS_TouchEventTypeDef - * Define Possible touch events kind as returned values - * by touch screen IC Driver. - */ -typedef enum -{ - TOUCH_EVENT_NO_EVT = 0x00, /*!< Touch Event : undetermined */ - TOUCH_EVENT_PRESS_DOWN = 0x01, /*!< Touch Event Press Down */ - TOUCH_EVENT_LIFT_UP = 0x02, /*!< Touch Event Lift Up */ - TOUCH_EVENT_CONTACT = 0x03, /*!< Touch Event Contact */ - TOUCH_EVENT_NB_MAX = 0x04 /*!< max number of touch events kind */ -} TS_TouchEventTypeDef; - -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Imported_Variables STM32469I EVAL TS Imported Variables - * @{ - */ -/** - * @brief Table for touchscreen event information display on LCD : - * table indexed on enum @ref TS_TouchEventTypeDef information - */ -extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX]; - -/** - * @brief Table for touchscreen gesture Id information display on LCD : table indexed - * on enum @ref TS_GestureIdTypeDef information - */ -extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX]; -/** - * @} - */ - -/** @defgroup STM32469I-EVAL_TS_Exported_Functions STM32469I EVAL TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -uint8_t BSP_TS_ITConfig(void); -uint8_t BSP_TS_ITGetStatus(void); -void BSP_TS_ITClear(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32469I_EVAL_TS_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL b/Drivers/BSP/STM324x9I_EVAL new file mode 160000 index 0000000000..8a5f75c82c --- /dev/null +++ b/Drivers/BSP/STM324x9I_EVAL @@ -0,0 +1 @@ +Subproject commit 8a5f75c82c205453715cbd71d6d6a655aac85041 diff --git a/Drivers/BSP/STM324x9I_EVAL/LICENSE.md b/Drivers/BSP/STM324x9I_EVAL/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM324x9I_EVAL/README.md b/Drivers/BSP/STM324x9I_EVAL/README.md deleted file mode 100644 index 939a17f2e8..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# BSP STM324X9I-EVAL Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm324x9i-eval.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm324x9i-eval** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM324X9I-EVAL** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm324x9i-eval/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ampire480272](https://github.com/STMicroelectronics/stm32-ampire480272) -* [stm32-ampire640480](https://github.com/STMicroelectronics/stm32-ampire640480) -* [stm32-exc7200](https://github.com/STMicroelectronics/stm32-exc7200) -* [stm32-otm8009a](https://github.com/STMicroelectronics/stm32-otm8009a) -* [stm32-ov2640](https://github.com/STMicroelectronics/stm32-ov2640) -* [stm32-stmpe1600](https://github.com/STMicroelectronics/stm32-stmpe1600) -* [stm32-stmpe811](https://github.com/STMicroelectronics/stm32-stmpe811) -* [stm32-ts3510](https://github.com/STMicroelectronics/stm32-ts3510) -* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM324x9I_EVAL/Release_Notes.html b/Drivers/BSP/STM324x9I_EVAL/Release_Notes.html deleted file mode 100644 index a490c023fd..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/Release_Notes.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - Release Notes for STM324x9I_EVAL Evaluation Board - - - - - - -
-
-
-

Release Notes for

-

STM324x9I_EVAL Evaluation Board

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM324x9I_EVAL Evaluation Board.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm324x9i_eval_audio.c/.h: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • stm324x9i_eval_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
  • Notes: -
      -
    • This version must be used with v3.0.0 of PDM library
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm324x9i_eval_audio.c/.h: -
      -
    • Add BSP_AUDIO_OUT_MspInit, BSP_AUDIO_OUT_MspDeInit and BSP_AUDIO_OUT_ClockConfig APIs as weak
    • -
    • Add BSP_AUDIO_IN_MspInit, BSP_AUDIO_IN_MspDeInit and BSP_AUDIO_IN_ClockConfig APIs as weak
    • -
    • Add BSP_AUDIO_OUT_DeInit and BSP_AUDIO_IN_DeInit APIs
    • -
  • -
  • stm324x9i_eval_sram.c/.h: -
      -
    • Add BSP_SRAM_MspInit API as weak
    • -
  • -
  • stm324x9i_eval_sdram.c/.h: -
      -
    • Add BSP_SDRAM_MspInit API as weak
    • -
  • -
  • stm324x9i_eval_camera.c/.h: -
      -
    • Add BSP_CAMERA_MspInit API as weak
    • -
  • -
  • Notes: -
      -
    • These BSP drivers break the compatibility with previous versions.
    • -
    • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Rework LCD initialization to ensure refresh rate of 60Hz. -
        -
      • Add new API “BSP_LCD_InitEx(uint32_t PclkConfig)†to propoerly manage LTCD pixel clock configuration.
      • -
      • Update “BSP_LCD_Init†to call new API BSP_LCD_InitEx().
      • -
      • Add LCD_MAX_PCLK/LCD_MIN_PCLK defines.
      • -
      • Add BSP_LCD_InitEx() function prototype.
      • -
    • -
    • Update VBP and HBP values used to calculate AccumulatedActiveH and AccumulatedActiveW for AMPIRE 480x272
    • -
  • -
  • stm324x9i_eval_ts.c: -
      -
    • Update BSP_TS_GetState() to return correct values of Touch Screen status and positions.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Add AUDIO_IO_DeInit() function to align with Common V4.0.0
    • -
  • -
  • stm324x9i _eval_audio.c -
      -
    • Remove CODEC_Reset() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Update to support new 5.7" VGA LCD (AM640480FTNQW-T07H-A) -
        -
      • Update I2Cx_ReadMultiple() API to considers the multiple read of the exc7200 touch screen position
      • -
      • Add BSP_TS3510_IsDetected() API to detect which LCD is mounted on the board
      • -
      • In header file, add new defines for ts3510 and exc7200 touch screen components I2C addresses
      • -
    • -
  • -
  • stm324x9i _eval_ts.c/.h -
      -
    • Update to support new 5.7" VGA LCD (AM640480FTNQW-T07H-A) -
        -
      • Update BSP_TS_Init() API to initialize the connected LCD device
      • -
      • Update BSP_TS_GetState() API to calculate the (x,y) position for the mounted LCD device
      • -
      • In header file, update to include the new touch screen component driver (exc7200)
      • -
    • -
  • -
  • stm324x9i _eval_sdram.c/.h -
      -
    • Update BSP_SDRAM_Init() API to set the right column bits number configuration according to the IS42S32800(ISSI) component available on the board
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE()
    • -
  • -
  • stm324x9i _eval_audio.c/.h -
      -
    • BSP_AUDIO_OUT_Play()/BSP_AUDIO_OUT_ChangeBuffer() add cast uint8_t on data pointer: update according to the HAL SAI driver update to support companding mode which works only with data type on 8-bits.
    • -
  • -
  • stm324x9i _eval_lcd.c -
      -
    • BSP_LCD_Init() update to check if DATA_IN_ExtSDRAM is enabled or not to avoid the re-initialization for SDRAM interface.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Change I2C_SPEED used define by BSP_I2C_SPEED
    • -
  • -
  • stm324x9i_eval_camera.c -
      -
    • BSP_CAMERA_Init(): Update the Initialization and Stop APIs to set and reset the STANDBY pin (to avoid conflict with SDCard detect pin)
    • -
  • -
  • stm324x9i_eval_camera.h, stm324x9i_eval_audio.h, stm324x9i_eval_eeprom.h, stm324x9i_eval_io.h, stm324x9i_eval_ts.h and stm324x9i_eval_lcd.c/.h -
      -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
  • stm324x9i_eval_nor.c/.h -
      -
    • Change NOR status definition NOR_OK and NOR_ERROR by NOR_STATUS_OK and NOR_STATUS_ERROR, respectively
    • -
  • -
  • stm324x9i_eval_sdram.c -
      -
    • BSP_SDRAM_Initialization_sequence(): Fix wrong configuration of the burst length
    • -
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval.c/.h -
      -
    • Add protection for double initialization of IO_Init within LCD_IO_Init()
    • -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
  • -
  • stm324x9i _eval_audio.c/.h -
      -
    • Add note that only the audio stereo format is supported
    • -
  • -
  • stm324x9i_eval_sd.c/.h -
      -
    • Ensure compatibility with the updated version of FatFs sd_diskio driver (i.e. FatFs R0.10 ST modified 20140422) supporting SDIO/SPI to interface uSD
    • -
  • -
  • stm324x9i_eval_lcd.c/.h -
      -
    • Update LCD clock configuration of 5.7" screen to avoid flicker effect within BSP_LCD_Init()
    • -
    • Comments clean up and typo corrections
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval_sd.c/.h -
      -
    • Update SD_DATATIMEOUT value
    • -
  • -
  • stm324x9i_eval_eeprom.c/.h -
      -
    • Update usage of BSP_EEPROM_TIMEOUT_UserCallback() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V1.0.3, and thus the 2 versions are not compatible.
  • -
  • This version has to be used only with STM32CubeF4 based development
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval_ioe8.c/.h -
      -
    • Enhance the Touch panel detection in IOE_TS_GetState() function : Add a check on FIFO Threshold value before reading X and Y position
    • -
  • -
-

Known Limitations

-
    -
  • stm324x9i_eval_audio_codec.c/.h -
      -
    • If 2 audio streams are played in TDM format (the first stream is configured in codec SLOT0 and second stream in codec SLOT1) the Pause/Resume, Volume Control and Mute action will apply on both streams.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval_lcd.c -
      -
    • Update BUFFER_OFFSET define value from 0x130000 to 0x12C000 and comment to explain how to compute this value
    • -
    • LCD_DeInit() function: remove SDRAM pins configuration, this is done in SDRAM driver
    • -
    • LCD_Init() function: in case where AMPIRE 640x480 LCD is used, add a call to LCD_I2C_Config() to initialize I2C for touch panel usage
    • -
    • Update and optimize LCD_Clear() function
    • -
    • Update and optimize putPixel() function: write directly to the SDRAM instead of the use of LCD_DrawLine() function
    • -
    • GetPosition() function: add more comments in the header about the format of the data returned by this function
    • -
    • GetPosition() function: remove the I2C configuration (it’s already done in LCD_Init() function)
    • -
    • LCD_CheckDevice() function: replace LCD_I2C_Config() by IOE_Config()
    • -
    • LCD_I2C_Config() function: add a test, if I2C is already configured, then there is no need to reconfigure it again
    • -
  • -
  • stm324x9i_eval_ioe8.c/.h -
      -
    • Remove EXTI line configuration macros
    • -
    • Remove VERIFY_WRITTENDATA macro, and remove verify written data block from I2C_WriteDeviceRegister() function
    • -
  • -
  • stm324x9i_eval_ioe16.c/.h -
      -
    • Remove VERIFY_WRITTENDATA macro, and remove verify written data block from IOE16_I2C_WriteDeviceRegister() function
    • -
  • -
  • stm324x9i_eval_audio_codec.c/.h -
      -
    • In Audio_MAL_IRQHandler() Remove local variables pAddr and Size and replace them by existing global variables CurrentPos and AudioRemSize
    • -
  • -
-

Known Limitations

-
    -
  • stm324x9i_eval_audio_codec.c/.h -
      -
    • If 2 audio streams are played in TDM format (the first stream is configured in codec SLOT0 and second stream in codec SLOT1) the Pause/Resume, Volume Control and Mute action will apply on both streams.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324x9i_eval_lcd.c -
      -
    • Update LCD_DisplayOff() function : Remove GPIO PA8 and PC6 configuration in low level, as we don’t need to configure any more these GPIO w/ STM32x9I-EVAL Boards RevB
    • -
    • Add comments for LCD_GetPosition() and LCD_CheckDevice function
    • -
  • -
  • stm324x9i_eval_ioe8.c/.h -
      -
    • Update IOE_TS_GetState() function : Enhance the TS detection algorithm
    • -
    • Update IOE_TS_Config() function : Update IOE FIFO threshold register value to 0x01 instead of 0x0F and update touch screen operation mode register value to 0x01 instead of 0x03
    • -
    • Add condition in IOE_GPIO_Config() and IOE_I2C_Config() functions to prevent I2C and its GPIOs reconfiguration
    • -
    • Update I2C_ReadDataBuffer() function: remove check at “I2C_FLAG_BUSY†in the beginning of the function
    • -
  • -
  • stm324x9i_eval_ioe16.c/.h -
      -
    • Add condition in IOE16_GPIO_Config() and IOE16_I2C_Config() functions to prevent I2C and its GPIOs reconfiguration
    • -
  • -
-

Known Limitations

-
    -
  • stm324x9i_eval_audio_codec.c/.h -
      -
    • If 2 audio streams are played in TDM format (the first stream is configured in codec SLOT0 and second stream in codec SLOT1) the Pause/Resume, Volume Control and Mute action will apply on both streams.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release for STM324x9I_EVAL board drivers.
  • -
-

Known Limitations

-
    -
  • stm324x9i_eval_audio_codec.c/.h -
      -
    • If 2 audio streams are played in TDM format (the first stream is configured in codec SLOT0 and second stream in codec SLOT1) the Pause/Resume, Volume Control and Mute action will apply on both streams.
    • -
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM324x9I_EVAL/_htmresc/favicon.png b/Drivers/BSP/STM324x9I_EVAL/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM324x9I_EVAL/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM324x9I_EVAL/_htmresc/mini-st_2020.css b/Drivers/BSP/STM324x9I_EVAL/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM324x9I_EVAL/_htmresc/st_logo_2020.png b/Drivers/BSP/STM324x9I_EVAL/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM324x9I_EVAL/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.c deleted file mode 100644 index a96870e08c..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.c +++ /dev/null @@ -1,911 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM324x9I-EVAL evaluation - * board(MB1045) RevB from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTE - - This driver requires the stm324x9i_eval_io to manage the joystick - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval.h" -#include "stm324x9i_eval_io.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM324x9I_EVAL STM324x9I EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL STM324x9I EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Private_Defines STM324x9I EVAL LOW LEVEL Private Defines - * @{ - */ -/** - * @brief STM324x9I EVAL BSP Driver version number V3.0.3 - */ -#define __STM324x9I_EVAL_BSP_VERSION_MAIN (0x03) /*!< [31:24] main version */ -#define __STM324x9I_EVAL_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM324x9I_EVAL_BSP_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */ -#define __STM324x9I_EVAL_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM324x9I_EVAL_BSP_VERSION ((__STM324x9I_EVAL_BSP_VERSION_MAIN << 24)\ - |(__STM324x9I_EVAL_BSP_VERSION_SUB1 << 16)\ - |(__STM324x9I_EVAL_BSP_VERSION_SUB2 << 8 )\ - |(__STM324x9I_EVAL_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Private_Variables STM324x9I EVAL LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, - LED2_GPIO_PORT, - LED3_GPIO_PORT, - LED4_GPIO_PORT}; - -const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, - LED2_PIN, - LED3_PIN, - LED4_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, - TAMPER_BUTTON_GPIO_PORT, - KEY_BUTTON_GPIO_PORT}; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, - TAMPER_BUTTON_PIN, - KEY_BUTTON_PIN}; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, - TAMPER_BUTTON_EXTI_IRQn, - KEY_BUTTON_EXTI_IRQn}; - -USART_TypeDef* COM_USART[COMn] = {EVAL_COM1}; - -GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT}; - -GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT}; - -const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN}; - -const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN}; - -const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF}; - -const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF}; - -static I2C_HandleTypeDef heval_I2c; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Private_FunctionPrototypes STM324x9I EVAL LOW LEVEL Private FunctionPrototypes - * @{ - */ -static void I2Cx_MspInit(void); -static void I2Cx_Init(void); -static void I2Cx_ITConfig(void); -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg); -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); -static void I2Cx_Error(uint8_t Addr); - -/* IOExpander IO functions */ -void IOE_Init(void); -void IOE_ITConfig(void); -void IOE_Delay(uint32_t Delay); -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg); -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* CAMERA IO functions */ -void CAMERA_IO_Init(void); -void CAMERA_Delay(uint32_t Delay); -void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg); - -/* I2C EEPROM IO function */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Private_Functions STM324x9I EVAL LOW LEVEL Private Functions - * @{ - */ - - /** - * @brief This method returns the STM324x9I EVAL BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM324x9I_EVAL_BSP_VERSION; -} - -/** - * @brief Configures LED GPIO. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable the GPIO_LED clock */ - LEDx_GPIO_CLK_ENABLE(Led); - - /* Configure the GPIO_LED pin */ - GPIO_InitStruct.Pin = GPIO_PIN[Led]; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - - HAL_GPIO_Init(GPIO_PORT[Led], &GPIO_InitStruct); - - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); -} - -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED1 - * @arg LED2 - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ - HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @param Button_Mode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable the BUTTON clock */ - BUTTONx_GPIO_CLK_ENABLE(Button); - - if(Button_Mode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - GPIO_InitStruct.Pin = BUTTON_PIN[Button]; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct); - } - - if(Button_Mode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - GPIO_InitStruct.Pin = BUTTON_PIN[Button]; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - - if(Button != BUTTON_WAKEUP) - { - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - } - else - { - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - } - - HAL_GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStruct); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @arg BUTTON_TAMPER: Tamper Push Button - * @arg BUTTON_KEY: Key Push Button - * @retval The Button GPIO pin value - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - -/** - * @brief Configures COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @arg COM2 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable GPIO clock */ - EVAL_COMx_TX_GPIO_CLK_ENABLE(COM); - EVAL_COMx_RX_GPIO_CLK_ENABLE(COM); - - /* Enable USART clock */ - EVAL_COMx_CLK_ENABLE(COM); - - /* Configure USART Tx as alternate function */ - GPIO_InitStruct.Pin = COM_TX_PIN[COM]; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Alternate = COM_TX_AF[COM]; - HAL_GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStruct); - - /* Configure USART Rx as alternate function */ - GPIO_InitStruct.Pin = COM_RX_PIN[COM]; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Alternate = COM_RX_AF[COM]; - HAL_GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStruct); - - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief Configures joystick GPIO and EXTI modes. - * @param Joy_Mode: Button mode. - * This parameter can be one of the following values: - * @arg JOY_MODE_GPIO: Joystick pins will be used as simple IOs - * @arg JOY_MODE_EXTI: Joystick pins will be connected to EXTI line - * with interrupt generation capability - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode) -{ - uint8_t ret = 0; - - /* Initialize the IO functionalities */ - ret = BSP_IO_Init(); - - /* Configure joystick pins in IT mode */ - if(Joy_Mode == JOY_MODE_EXTI) - { - /* Configure IO interrupt acquisition mode */ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_IT_FALLING_EDGE); - } - - return ret; -} - -/** - * @brief Returns the current joystick status. - * @retval Code of the joystick key pressed - * This code can be one of the following values: - * @arg JOY_NONE - * @arg JOY_SEL - * @arg JOY_DOWN - * @arg JOY_LEFT - * @arg JOY_RIGHT - * @arg JOY_UP - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - uint16_t tmp = 0; - - /* Read the status joystick pins */ - tmp = BSP_IO_ReadPin(JOY_ALL_PINS); - - /* Check the pressed keys */ - if((tmp & JOY_NONE_PIN) == JOY_NONE) - { - return(JOYState_TypeDef) JOY_NONE; - } - else if(!(tmp & JOY_SEL_PIN)) - { - return(JOYState_TypeDef) JOY_SEL; - } - else if(!(tmp & JOY_DOWN_PIN)) - { - return(JOYState_TypeDef) JOY_DOWN; - } - else if(!(tmp & JOY_LEFT_PIN)) - { - return(JOYState_TypeDef) JOY_LEFT; - } - else if(!(tmp & JOY_RIGHT_PIN)) - { - return(JOYState_TypeDef) JOY_RIGHT; - } - else if(!(tmp & JOY_UP_PIN)) - { - return(JOYState_TypeDef) JOY_UP; - } - else - { - return(JOYState_TypeDef) JOY_NONE; - } -} - -/** - * @brief Check TS3510 touch screen presence - * @retval Return 0 if TS3510 is detected, return 1 if not detected - */ -uint8_t BSP_TS3510_IsDetected(void) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t error = 0; - uint8_t a_buffer; - - uint8_t tmp_buffer[2] = {0x81, 0x08}; - - /* Prepare for LCD read data */ - IOE_WriteMultiple(TS3510_I2C_ADDRESS, 0x8A, tmp_buffer, 2); - - status = HAL_I2C_Mem_Read(&heval_I2c, TS3510_I2C_ADDRESS, 0x8A, I2C_MEMADD_SIZE_8BIT, &a_buffer, 1, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - error = (uint32_t)HAL_I2C_GetError(&heval_I2c); - - /* I2C error occurred */ - I2Cx_Error(TS3510_I2C_ADDRESS); - - if(error == HAL_I2C_ERROR_AF) - { - return 1; - } - } - return 0; -} -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes I2C MSP. - */ -static void I2Cx_MspInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - GPIO_InitStruct.Pin = EVAL_I2Cx_SCL_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = EVAL_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &GPIO_InitStruct); - - /* Configure I2C Rx as alternate function */ - GPIO_InitStruct.Pin = EVAL_I2Cx_SDA_PIN; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &GPIO_InitStruct); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - EVAL_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - EVAL_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - EVAL_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_EV_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(EVAL_I2Cx_ER_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_ER_IRQn); -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2Cx_Init(void) -{ - if(HAL_I2C_GetState(&heval_I2c) == HAL_I2C_STATE_RESET) - { - heval_I2c.Instance = I2C1; - heval_I2c.Init.ClockSpeed = BSP_I2C_SPEED; - heval_I2c.Init.DutyCycle = I2C_DUTYCYCLE_2; - heval_I2c.Init.OwnAddress1 = 0; - heval_I2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - heval_I2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; - heval_I2c.Init.OwnAddress2 = 0; - heval_I2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; - heval_I2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; - - /* Init the I2C */ - I2Cx_MspInit(); - HAL_I2C_Init(&heval_I2c); - } -} - -/** - * @brief Configures I2C Interrupt. - */ -static void I2Cx_ITConfig(void) -{ - static uint8_t I2C_IT_Enabled = 0; - GPIO_InitTypeDef GPIO_InitStruct; - - if(I2C_IT_Enabled == 0) - { - I2C_IT_Enabled = 1; - /* Enable the GPIO EXTI clock */ - __GPIOI_CLK_ENABLE(); - __SYSCFG_CLK_ENABLE(); - - GPIO_InitStruct.Pin = GPIO_PIN_8; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_LOW; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); - - /* Enable and set GPIO EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(EXTI9_5_IRQn), 0x0F, 0x0F); - HAL_NVIC_EnableIRQ((IRQn_Type)(EXTI9_5_IRQn)); - } -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, 100); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t Value = 0; - - status = HAL_I2C_Mem_Read(&heval_I2c, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } - return Value; -} - -/** - * @brief Reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress: Internal memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - if(Addr == EXC7200_I2C_ADDRESS) - { - status = HAL_I2C_Master_Receive(&heval_I2c, Addr, Buffer, Length, 1000); - } - else - { - status = HAL_I2C_Mem_Read(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - } - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress: Internal memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initialize the I2C Bus */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(&heval_I2c, DevAddress, Trials, 1000)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param Addr: I2C Address - */ -static void I2Cx_Error(uint8_t Addr) -{ - /* De-initialize the I2C communication bus */ - HAL_I2C_DeInit(&heval_I2c); - - /* Re-Initialize the I2C communication bus */ - I2Cx_Init(); -} - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/********************************* LINK IOE ***********************************/ - -/** - * @brief Initializes IOE low level. - */ -void IOE_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Configures IOE low level interrupt. - */ -void IOE_ITConfig(void) -{ - I2Cx_ITConfig(); -} - -/** - * @brief IOE writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief IOE reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief IOE reads multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief IOE writes multiple data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - I2Cx_WriteMultiple(Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief IOE delay - * @param Delay: Delay in ms - */ -void IOE_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - - I2Cx_WriteMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t Read_Value = 0, tmp = 0; - - I2Cx_ReadMultiple(Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&Read_Value, 2); - - tmp = ((uint16_t)(Read_Value >> 8) & 0x00FF); - - tmp |= ((uint16_t)(Read_Value << 8)& 0xFF00); - - Read_Value = tmp; - - return Read_Value; -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK CAMERA ********************************/ - -/** - * @brief Initializes Camera low level. - */ -void CAMERA_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Camera writes single data. - * @param Addr: I2C address - * @param Reg: Register address - * @param Value: Data to be written - */ -void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief Camera reads single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Read data - */ -uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief Camera delay - * @param Delay: Delay in ms - */ -void CAMERA_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Read data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(DevAddress, Trials)); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.h deleted file mode 100644 index ebcf3fdf6d..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval.h +++ /dev/null @@ -1,318 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval.h - * @author MCD Application Team - * @brief This file contains definitions for STM324x9I_EVAL's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324X9I_EVAL_H -#define __STM324X9I_EVAL_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_LOW_LEVEL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Exported_Types STM324x9I EVAL LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED1 = 0, - LED2 = 1, - LED3 = 2, - LED4 = 3 -}Led_TypeDef; - -typedef enum -{ - BUTTON_WAKEUP = 0, - BUTTON_TAMPER = 1, - BUTTON_KEY = 2 -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - JOY_MODE_GPIO = 0, - JOY_MODE_EXTI = 1 -}JOYMode_TypeDef; - -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 -}JOYState_TypeDef; - -typedef enum -{ - COM1 = 0, - COM2 = 1 -}COM_TypeDef; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Exported_Constants STM324x9I EVAL LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM324x9I_EVAL board - */ -#if !defined (USE_STM324x9I_EVAL) - #define USE_STM324x9I_EVAL -#endif - -#define LEDn 4 - -#define LED1_PIN GPIO_PIN_6 -#define LED1_GPIO_PORT GPIOG -#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - - -#define LED2_PIN GPIO_PIN_7 -#define LED2_GPIO_PORT GPIOG -#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LED3_PIN GPIO_PIN_10 -#define LED3_GPIO_PORT GPIOG -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LED4_PIN GPIO_PIN_12 -#define LED4_GPIO_PORT GPIOG -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED2_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 3) LED4_GPIO_CLK_ENABLE(); \ - }while(0) - -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED2_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 2) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 3) LED4_GPIO_CLK_DISABLE(); \ - }while(0) - -/* Joystick pins are connected to IO Expander (accessible through I2C1 interface) */ -#define BUTTONn 3 - -/** - * @brief Joystick Pins definition - */ -#define JOY_SEL_PIN IO_PIN_14 -#define JOY_DOWN_PIN IO_PIN_13 -#define JOY_LEFT_PIN IO_PIN_12 -#define JOY_RIGHT_PIN IO_PIN_11 -#define JOY_UP_PIN IO_PIN_10 -#define JOY_NONE_PIN JOY_ALL_PINS -#define JOY_ALL_PINS (IO_PIN_10 | IO_PIN_11 | IO_PIN_12 | IO_PIN_13 | IO_PIN_14) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -/** - * @brief Tamper push-button - */ -#define TAMPER_BUTTON_PIN GPIO_PIN_13 -#define TAMPER_BUTTON_GPIO_PORT GPIOC -#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Key push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_13 -#define KEY_BUTTON_GPIO_PORT GPIOC -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else \ - if ((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_DISABLE(); else \ - if ((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) - -#define COMn 1 - -/** - * @brief Definition for COM port1, connected to USART1 - */ -#define EVAL_COM1 USART1 -#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() -#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE() - -#define EVAL_COM1_TX_PIN GPIO_PIN_9 -#define EVAL_COM1_TX_GPIO_PORT GPIOA -#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define EVAL_COM1_TX_AF GPIO_AF7_USART1 - -#define EVAL_COM1_RX_PIN GPIO_PIN_10 -#define EVAL_COM1_RX_GPIO_PORT GPIOA -#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define EVAL_COM1_RX_AF GPIO_AF7_USART1 - -#define EVAL_COM1_IRQn USART1_IRQn - -#define EVAL_COMx_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_DISABLE(); \ - }while(0) - -#define EVAL_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_DISABLE(); \ - }while(0) - -#define EVAL_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_DISABLE(); \ - }while(0) - -/** - * @brief Eval Pins definition - */ -#define XSDN_PIN IO_PIN_0 -#define MII_INT_PIN IO_PIN_1 -#define RSTI_PIN IO_PIN_2 -#define CAM_PLUG_PIN IO_PIN_3 -#define LCD_INT_PIN IO_PIN_4 -#define AUDIO_INT_PIN IO_PIN_5 -#define OTG_FS1_OVER_CURRENT_PIN IO_PIN_6 -#define OTG_FS1_POWER_SWITCH_PIN IO_PIN_7 -#define OTG_FS2_OVER_CURRENT_PIN IO_PIN_8 -#define OTG_FS2_POWER_SWITCH_PIN IO_PIN_9 -#define SD_DETECT_PIN IO_PIN_15 - -/* Exported constant IO ------------------------------------------------------*/ -#define IO_I2C_ADDRESS 0x84 -#define TS_I2C_ADDRESS 0x82 -#define TS3510_I2C_ADDRESS 0x80 -#define EXC7200_I2C_ADDRESS 0x08 -#define CAMERA_I2C_ADDRESS 0x60 -#define AUDIO_I2C_ADDRESS 0x34 -#define EEPROM_I2C_ADDRESS_A01 0xA0 -#define EEPROM_I2C_ADDRESS_A02 0xA6 -/* I2C clock speed configuration (in Hz) - WARNING: - Make sure that this define is not already declared in other files (ie. - stm324x9I_eval.h file). It can be used in parallel by other modules. */ -#ifndef BSP_I2C_SPEED - #define BSP_I2C_SPEED 100000 -#endif /* BSP_I2C_SPEED */ - -/* User can use this section to tailor I2Cx/I2Cx instance used and associated - resources */ -/* Definition for I2Cx clock resources */ -#define EVAL_I2Cx I2C1 -#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define EVAL_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define EVAL_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define EVAL_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define EVAL_I2Cx_SCL_PIN GPIO_PIN_6 -#define EVAL_I2Cx_SCL_SDA_GPIO_PORT GPIOB -#define EVAL_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1 -#define EVAL_I2Cx_SDA_PIN GPIO_PIN_9 - -/* I2C interrupt requests */ -#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn -#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LOW_LEVEL_Exported_Functions STM324x9I EVAL LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart); -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode); -JOYState_TypeDef BSP_JOY_GetState(void); -uint8_t BSP_TS3510_IsDetected(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324X9I_EVAL_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.c deleted file mode 100644 index 70305fae61..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.c +++ /dev/null @@ -1,1268 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM324x9I-EVAL (MB1045) Evaluation boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, SAI, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec or the IOExpander has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER : only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_EVAL_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm324x9i_eval_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, the audio frame slot, - the device output mode the mute or the stop, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetAudioFrameSlot(), BSP_AUDIO_OUT_SetOutputMode(), - BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the stm324x9i_eval_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm324x9i_eval_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. - -Known Limitations: ------------------- - 1- If the TDM Format used to paly in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_AUDIO STM324x9I EVAL AUDIO - * @brief This file includes the low layer driver for wm8994 Audio Codec - * available on STM324x9I-EVAL evaluation board(MB1045). - * @{ - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_Private_Variables STM324x9I EVAL AUDIO Private Variables - * @{ - */ -AUDIO_DrvTypeDef *audio_drv; -SAI_HandleTypeDef haudio_out_sai; -I2S_HandleTypeDef haudio_in_i2s; -TIM_HandleTypeDef haudio_tim; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -uint8_t Channel_Demux[128] = { - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x08, 0x09, 0x08, 0x09, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f, - 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x0e, 0x0f -}; - -uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_Private_Function_Prototypes STM324x9I EVAL AUDIO Private Function Prototypes - * @{ - */ -static void SAIx_Init(uint32_t AudioFreq); -static void SAIx_DeInit(void); -static void I2Sx_Init(uint32_t AudioFreq); -static void I2Sx_DeInit(void); -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim); -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim); -static void TIMx_Init(void); -static void TIMx_DeInit(void); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_out_Private_Functions STM324x9I EVAL AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The I2S PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - - /* Disable SAI */ - SAIx_DeInit(); - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* SAI data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to SAI peripheral */ - haudio_out_sai.Instance = AUDIO_SAIx; - if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET) - { - /* Init the SAI MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL); - } - SAIx_Init(AudioFreq); - - /* wm8994 codec initialization */ - if((wm8994_drv.ReadID(AUDIO_I2C_ADDRESS)) == WM8994_ID) - { - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief De-initialize the audio peripherals. - * @retval None - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - SAIx_DeInit(); - /* DeInit the SAI MSP : this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspDeInit(&haudio_out_sai, NULL); -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*)pBuffer, DMA_MAX(Size / AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the SAI interface. - * @param pData: pointer on data address - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*)pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_SAI_DMAPause(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief This function Resumes the audio file stream. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause/resume function */ - HAL_SAI_DMAResume(&haudio_out_sai); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_SAI_DMAStop(&haudio_out_sai); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(1); - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL); - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frequency configuration */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Updates the Audio frame slot configuration. - * @param AudioFrameSlot: specifies the audio Frame slot - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frame slot. - */ -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot) -{ - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Update the SAI audio frame slot configuration */ - haudio_out_sai.SlotInit.SlotActive = AudioFrameSlot; - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - - -/** - * @brief Clock Config. - * @param hsai: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @retval None - */ -__weak void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct; - - HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLSAI prescalers */ - /* PLLI2S_VCO: VCO_429M - SAI_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 429/2 = 214.5 Mhz - SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ = 214.5/19 = 11.289 Mhz */ - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 429; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SQ = 2; - RCC_ExCLKInitStruct.PLLI2SDivQ = 19; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */ - { - /* SAI clock config - PLLI2S_VCO: VCO_344M - SAI_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 344/7 = 49.142 Mhz - SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ = 49.142/1 = 49.142 Mhz */ - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SAI_PLLI2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 344; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SQ = 7; - RCC_ExCLKInitStruct.PLLI2SDivQ = 1; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); - } -} - -/** - * @brief Initialize BSP_AUDIO_OUT MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval None - */ -__weak void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) -{ - static DMA_HandleTypeDef hdma_saiTx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable SAI clock */ - AUDIO_SAIx_CLK_ENABLE(); - - /* Enable GPIO clock */ - AUDIO_SAIx_MCLK_SCK_SD_FS_ENABLE(); - - /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ - GPIO_InitStruct.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN | AUDIO_SAIx_MCK_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; - GPIO_InitStruct.Alternate = AUDIO_SAIx_MCLK_SCK_SD_FS_AF; - HAL_GPIO_Init(AUDIO_SAIx_MCLK_SCK_SD_FS_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the DMA clock */ - AUDIO_SAIx_DMAx_CLK_ENABLE(); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Configure the hdma_saiTx handle parameters */ - hdma_saiTx.Init.Channel = AUDIO_SAIx_DMAx_CHANNEL; - hdma_saiTx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_saiTx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_saiTx.Init.MemInc = DMA_MINC_ENABLE; - hdma_saiTx.Init.PeriphDataAlignment = AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE; - hdma_saiTx.Init.MemDataAlignment = AUDIO_SAIx_DMAx_MEM_DATA_SIZE; - hdma_saiTx.Init.Mode = DMA_NORMAL; - hdma_saiTx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_saiTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_saiTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_saiTx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_saiTx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_saiTx.Instance = AUDIO_SAIx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsai, hdmatx, hdma_saiTx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_saiTx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_saiTx); - } - - /* SAI DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_SAIx_DMAx_IRQ); -} - -/** - * @brief Deinitialize SAI MSP. - * @param hsai: SAI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* SAI DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_SAIx_DMAx_IRQ); - - if(hsai->Instance == AUDIO_SAIx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hsai->hdmatx); - } - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(hsai); - - /* Deactivates CODEC_SAI pins FS, SCK, MCK and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_SAIx_FS_PIN | AUDIO_SAIx_SCK_PIN | AUDIO_SAIx_SD_PIN | AUDIO_SAIx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_SAIx_MCLK_SCK_SD_FS_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable SAI clock */ - AUDIO_SAIx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcharging this __weak function */ -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm324x9i_eval_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm324x9i_eval_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief SAI error callbacks. - * @param hsai: SAI handle - */ -void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (SAI). - * @param AudioFreq: Audio frequency to be configured for the SAI peripheral. - * @note The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 - * and user can update this configuration using - */ -static void SAIx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_out_sai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral to allow access to SAI internal registers */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - /* Configure SAI_Block_x - LSBFirst: Disabled - DataSize: 16 */ - haudio_out_sai.Init.AudioFrequency = AudioFreq; - haudio_out_sai.Init.ClockSource = SAI_CLKSOURCE_PLLI2S; - haudio_out_sai.Init.AudioMode = SAI_MODEMASTER_TX; - haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLED; - haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL; - haudio_out_sai.Init.DataSize = SAI_DATASIZE_16; - haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB; - haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_FALLINGEDGE; - haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS; - haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLED; - haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF; - - /* Configure SAI_Block_x Frame - Frame Length: 64 - Frame active Length: 32 - FS Definition: Start frame + Channel Side identification - FS Polarity: FS active Low - FS Offset: FS asserted one bit before the first bit of slot 0 */ - haudio_out_sai.FrameInit.FrameLength = 64; - haudio_out_sai.FrameInit.ActiveFrameLength = 32; - haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION; - haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW; - haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT; - - /* Configure SAI Block_x Slot - Slot First Bit Offset: 0 - Slot Size : 16 - Slot Number: 4 - Slot Active: All slot actives */ - haudio_out_sai.SlotInit.FirstBitOffset = 0; - haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE; - haudio_out_sai.SlotInit.SlotNumber = 4; - haudio_out_sai.SlotInit.SlotActive = CODEC_AUDIOFRAME_SLOT_0123; - - HAL_SAI_Init(&haudio_out_sai); - - /* Enable SAI peripheral to generate MCLK */ - __HAL_SAI_ENABLE(&haudio_out_sai); -} - -/** - * @brief Deinitialize the Audio Codec audio interface (SAI). - */ -static void SAIx_DeInit(void) -{ - /* Initialize the haudio_out_sai Instance parameter */ - haudio_out_sai.Instance = AUDIO_SAIx; - - /* Disable SAI peripheral */ - __HAL_SAI_DISABLE(&haudio_out_sai); - - HAL_SAI_DeInit(&haudio_out_sai); -} - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_IN_Private_Functions STM324x9I EVAL AUDIO IN Private Functions - * @{ - */ -/** - * @brief Initializes wave recording. - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - /* DeInit the I2S */ - I2Sx_DeInit(); - - /* Configure PLL clock */ - BSP_AUDIO_IN_ClockConfig(&haudio_in_i2s, NULL); - - /* Configure the PDM library */ - PDMDecoder_Init(AudioFreq, ChnlNbr, ChnlNbr); - - /* Configure the I2S peripheral */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - if(HAL_I2S_GetState(&haudio_in_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&haudio_in_i2s, NULL); - } - - /* Configure the I2S peripheral */ - I2Sx_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Deinit the audio IN peripherals. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - /* DeInit the I2S */ - I2Sx_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the applic */ - BSP_AUDIO_IN_MspDeInit(&haudio_in_i2s, NULL); - /* DeInit the Timer */ - TIMx_DeInit(); -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&haudio_in_i2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* TIMx Peripheral clock disable */ - AUDIO_TIMx_CLK_DISABLE(); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&haudio_in_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf) -{ - uint8_t AppPDM[INTERNAL_BUFF_SIZE*2]; - uint8_t byte1 = 0, byte2 = 0; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; index> 8)& 0xFF; - byte1 = (PDMBuf[index] & 0xFF); - AppPDM[(index*2)+1] = Channel_Demux[byte1 & CHANNEL_DEMUX_MASK] | Channel_Demux[byte2 & CHANNEL_DEMUX_MASK] << 4; - AppPDM[(index*2)] = Channel_Demux[(byte1 >> 1) & CHANNEL_DEMUX_MASK] | Channel_Demux[(byte2 >> 1) & CHANNEL_DEMUX_MASK] << 4; - } - - for(index = 0; index < DEFAULT_AUDIO_IN_CHANNEL_NBR; index++) - { - /* PDM to PCM filter */ - PDM_Filter((uint8_t*)&AppPDM[index], (uint16_t*)&(PCMBuf[index]), &PDM_FilterHandler[index]); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - - /** - * @brief Rx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Rx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm324x9i_eval_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm324x9i_eval_audio.h) */ - BSP_AUDIO_IN_Error_Callback(); -} - -/** - * @brief Clock Config. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_IN_Init() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params) -{ - RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct; - - HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct); - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 384; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = 2; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); -} - -/** - * @brief Initialize BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2sRx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Configure the Timer which clocks the MEMS */ - /* Moved inside MSP to allow applic to redefine the TIMx_MspInit */ - TIMx_Init(); - - /* Enable I2S clock */ - AUDIO_I2Sx_CLK_ENABLE(); - - /* Enable SCK and SD GPIO clock */ - AUDIO_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE(); - /* CODEC_I2S pins configuration: WS, SCK and SD pins */ - GPIO_InitStruct.Pin = AUDIO_I2Sx_SCK_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = AUDIO_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SCK_GPIO_PORT, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = AUDIO_I2Sx_SD_PIN; - GPIO_InitStruct.Alternate = AUDIO_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SD_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the DMA clock */ - AUDIO_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Configure the hdma_i2sRx handle parameters */ - hdma_i2sRx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL; - hdma_i2sRx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2sRx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sRx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sRx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2sRx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2sRx.Init.Mode = DMA_CIRCULAR; - hdma_i2sRx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sRx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2sRx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sRx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sRx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2sRx.Instance = AUDIO_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2sRx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sRx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sRx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ); -} - -/** - * @brief BSP AUDIO IN MSP Init. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = AUDIO_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = AUDIO_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_in_i2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* I2S2 peripheral configuration */ - haudio_in_i2s.Init.AudioFreq = 4 * AudioFreq; - haudio_in_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2s.Init.CPOL = I2S_CPOL_HIGH; - haudio_in_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - haudio_in_i2s.Init.Mode = I2S_MODE_MASTER_RX; - haudio_in_i2s.Init.Standard = I2S_STANDARD_LSB; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_in_i2s); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2s); -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspInit(TIM_HandleTypeDef *htim) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable peripherals and GPIO Clocks --------------------------------------*/ - /* TIMx Peripheral clock enable */ - AUDIO_TIMx_CLK_ENABLE(); - - /* Enable GPIO Channels Clock */ - AUDIO_TIMx_GPIO_CLK_ENABLE(); - - /* Configure I/Os ----------------------------------------------------------*/ - /* Common configuration for all channels */ - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; - GPIO_InitStruct.Alternate = AUDIO_TIMx_AF; - - /* Configure TIM input channel */ - GPIO_InitStruct.Pin = AUDIO_TIMx_IN_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO, &GPIO_InitStruct); - - /* Configure TIM output channel */ - GPIO_InitStruct.Pin = AUDIO_TIMx_OUT_GPIO_PIN; - HAL_GPIO_Init(AUDIO_TIMx_GPIO, &GPIO_InitStruct); -} - -/** - * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle - */ -static void TIMx_IC_MspDeInit(TIM_HandleTypeDef *htim) -{ - /* Disable TIMx Peripheral clock */ - AUDIO_TIMx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_Init(void) -{ - TIM_IC_InitTypeDef sICConfig; - TIM_OC_InitTypeDef sOCConfig; - TIM_ClockConfigTypeDef sCLKSourceConfig; - TIM_SlaveConfigTypeDef sSlaveConfig; - - /* Configure the TIM peripheral --------------------------------------------*/ - /* Set TIMx instance */ - haudio_tim.Instance = AUDIO_TIMx; - /* Timer Input Capture Configuration Structure declaration */ - /* Initialize TIMx peripheral as follow: - + Period = 0xFFFF - + Prescaler = 0 - + ClockDivision = 0 - + Counter direction = Up - */ - haudio_tim.Init.Period = 1; - haudio_tim.Init.Prescaler = 0; - haudio_tim.Init.ClockDivision = 0; - haudio_tim.Init.CounterMode = TIM_COUNTERMODE_UP; - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspInit(&haudio_tim); - HAL_TIM_IC_Init(&haudio_tim); - - /* Configure the Input Capture channel -------------------------------------*/ - /* Configure the Input Capture of channel 2 */ - sICConfig.ICPolarity = TIM_ICPOLARITY_FALLING; - sICConfig.ICSelection = TIM_ICSELECTION_DIRECTTI; - sICConfig.ICPrescaler = TIM_ICPSC_DIV1; - sICConfig.ICFilter = 0; - HAL_TIM_IC_ConfigChannel(&haudio_tim, &sICConfig, AUDIO_TIMx_IN_CHANNEL); - - /* Select external clock mode 1 */ - sCLKSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE1; - sCLKSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED; - sCLKSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1; - sCLKSourceConfig.ClockFilter = 0; - HAL_TIM_ConfigClockSource(&haudio_tim, &sCLKSourceConfig); - - /* Select Input Channel as input trigger */ - sSlaveConfig.InputTrigger = TIM_TS_TI1FP1; - sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; - sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED; - sSlaveConfig.TriggerPrescaler = TIM_CLOCKPRESCALER_DIV1; - sSlaveConfig.TriggerFilter = 0; - HAL_TIM_SlaveConfigSynchronization(&haudio_tim, &sSlaveConfig); - - /* Output Compare PWM Mode configuration: Channel2 */ - sOCConfig.OCMode = TIM_OCMODE_PWM1; - sOCConfig.OCIdleState = TIM_OCIDLESTATE_SET; - sOCConfig.Pulse = 1; - sOCConfig.OCPolarity = TIM_OCPOLARITY_HIGH; - sOCConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH; - sOCConfig.OCFastMode = TIM_OCFAST_DISABLE; - sOCConfig.OCNIdleState = TIM_OCNIDLESTATE_SET; - - /* Initialize the TIM3 Channel2 with the structure above */ - HAL_TIM_PWM_ConfigChannel(&haudio_tim, &sOCConfig, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel2 */ - HAL_TIM_PWM_Start(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - - /* Start the TIM3 Channel1 */ - HAL_TIM_IC_Start(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); -} - -/** - * @brief Configure TIM as a clock divider by 2. - * I2S_SCK is externally connected to TIMx input channel - */ -static void TIMx_DeInit(void) -{ - haudio_tim.Instance = AUDIO_TIMx; - - /* Stop the TIM3 Channel2 */ - HAL_TIM_PWM_Stop(&haudio_tim, AUDIO_TIMx_OUT_CHANNEL); - /* Stop the TIM3 Channel1 */ - HAL_TIM_IC_Stop(&haudio_tim, AUDIO_TIMx_IN_CHANNEL); - - HAL_TIM_IC_DeInit(&haudio_tim); - - /* Initialize the TIMx peripheral with the structure above */ - TIMx_IC_MspDeInit(&haudio_tim); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.h deleted file mode 100644 index 2d30f164b3..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_audio.h +++ /dev/null @@ -1,276 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_AUDIO_H -#define __STM324x9I_EVAL_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/wm8994/wm8994.h" -#include "stm324x9i_eval.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_AUDIO - * @{ - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_Exported_Constants STM324x9I EVAL AUDIO Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - USER SAI defines parameters - -----------------------------------------------------------------------------*/ -/** CODEC_AudioFrame_SLOT_TDMMode - * @brief In W8994 codec the Audio frame contains 4 slots : TDM Mode - * TDM format : - * +------------------|------------------|--------------------|-------------------+ - * | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right | - * +------------------------------------------------------------------------------+ - */ -/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */ -#define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3 -/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2 -/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ -#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3 - -/* SAI peripheral configuration defines */ -#define AUDIO_SAIx SAI1_Block_B -#define AUDIO_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE() -#define AUDIO_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE() -#define AUDIO_SAIx_MCLK_SCK_SD_FS_AF GPIO_AF6_SAI1 - -#define AUDIO_SAIx_MCLK_SCK_SD_FS_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define AUDIO_SAIx_FS_PIN GPIO_PIN_9 -#define AUDIO_SAIx_SCK_PIN GPIO_PIN_8 -#define AUDIO_SAIx_SD_PIN GPIO_PIN_6 -#define AUDIO_SAIx_MCK_PIN GPIO_PIN_7 -#define AUDIO_SAIx_MCLK_SCK_SD_FS_GPIO_PORT GPIOF - - -/* SAI DMA Stream definitions */ -#define AUDIO_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_SAIx_DMAx_STREAM DMA2_Stream5 -#define AUDIO_SAIx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_SAIx_DMAx_IRQ DMA2_Stream5_IRQn -#define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define AUDIO_SAIx_DMAx_IRQHandler DMA2_Stream5_IRQHandler - -/* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 0x0E /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_I2Sx SPI3 -#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_3 -#define AUDIO_I2Sx_SCK_GPIO_PORT GPIOB -#define AUDIO_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_I2Sx_SCK_AF GPIO_AF6_SPI3 - -#define AUDIO_I2Sx_SD_PIN GPIO_PIN_6 -#define AUDIO_I2Sx_SD_GPIO_PORT GPIOD -#define AUDIO_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_I2Sx_SD_AF GPIO_AF5_I2S3ext - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream2 -#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream2_IRQn -#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream2_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - - -/* Two channels are used: - - one channel as input which is connected to I2S SCK in stereo mode - - one channel as output which divides the frequency on the input -*/ - -#define AUDIO_TIMx_CLK_ENABLE() __HAL_RCC_TIM3_CLK_ENABLE() -#define AUDIO_TIMx_CLK_DISABLE() __HAL_RCC_TIM3_CLK_DISABLE() -#define AUDIO_TIMx TIM3 -#define AUDIO_TIMx_IN_CHANNEL TIM_CHANNEL_1 -#define AUDIO_TIMx_OUT_CHANNEL TIM_CHANNEL_2 /* Select channel 2 as output */ -#define AUDIO_TIMx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_TIMx_GPIO GPIOC -#define AUDIO_TIMx_IN_GPIO_PIN GPIO_PIN_6 -#define AUDIO_TIMx_OUT_GPIO_PIN GPIO_PIN_7 -#define AUDIO_TIMx_AF GPIO_AF2_TIM3 - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK 0 -#define AUDIO_ERROR 1 -#define AUDIO_TIMEOUT 2 - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION 16 -#define DEFAULT_AUDIO_IN_CHANNEL_NBR 2 /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME 64 - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR -/* PCM buffer output size */ -#define PCM_OUT_SIZE DEFAULT_AUDIO_IN_FREQ/1000*2 -#define CHANNEL_DEMUX_MASK 0x55 - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/* Delay for the Codec to be correctly reset */ -#define CODEC_RESET_DELAY 5 - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_Exported_Variables STM324x9I EVAL AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_Exported_Macros STM324x9I EVAL AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_OUT_Exported_Functions STM324x9I EVAL AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -void BSP_AUDIO_OUT_DeInit(void); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params); -void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params); -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_AUDIO_IN_Exported_Functions STM324x9I EVAL AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -void BSP_AUDIO_IN_DeInit(void); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t* PDMBuf, uint16_t* PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_AUDIO_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.c deleted file mode 100644 index ab99dc309f..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.c +++ /dev/null @@ -1,516 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_camera.c - * @author MCD Application Team - * @brief This file includes the driver for Camera modules mounted on - * STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How to use this driver: --------------------------- - - This driver is used to drive the camera. - - The OV2640 component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the camera using the BSP_CAMERA_Init() function. - o Start the camera capture/snapshot using the CAMERA_Start() function. - o Suspend, resume or stop the camera capture using the following functions: - - BSP_CAMERA_Suspend() - - BSP_CAMERA_Resume() - - BSP_CAMERA_Stop() - - + Options - o Increase or decrease on the fly the brightness and/or contrast - using the following function: - - BSP_CAMERA_ContrastBrightnessConfig - o Add a special effect on the fly using the following functions: - - BSP_CAMERA_BlackWhiteConfig() - - BSP_CAMERA_ColorEffectConfig() - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_CAMERA STM324x9I EVAL CAMERA - * @{ - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Private_Variables STM324x9I EVAL CAMERA Private Variables - * @{ - */ -static DCMI_HandleTypeDef hdcmi_eval; - CAMERA_DrvTypeDef *camera_drv; -uint32_t current_resolution; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Private_FunctionPrototypes STM324x9I EVAL CAMERA Private FunctionPrototypes - * @{ - */ -static uint32_t GetSize(uint32_t resolution); -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Private_Functions STM324x9I EVAL CAMERA Private Functions - * @{ - */ - -/** - * @brief Initializes the camera. - * @param Resolution: Camera Resolution - * @retval Camera status - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution) -{ - DCMI_HandleTypeDef *phdcmi; - - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hdcmi_eval; - - /*** Configures the DCMI to interface with the camera module ***/ - /* DCMI configuration */ - phdcmi->Init.CaptureRate = DCMI_CR_ALL_FRAME; - phdcmi->Init.HSPolarity = DCMI_HSPOLARITY_LOW; - phdcmi->Init.SynchroMode = DCMI_SYNCHRO_HARDWARE; - phdcmi->Init.VSPolarity = DCMI_VSPOLARITY_LOW; - phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B; - phdcmi->Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; - phdcmi->Instance = DCMI; - - /* Configure IO functionalities for camera detect pin */ - BSP_IO_Init(); - - /* Set the camera STANDBY pin */ - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - BSP_IO_WritePin(XSDN_PIN, SET); - - /* Check if the camera is plugged */ - if(BSP_IO_ReadPin(CAM_PLUG_PIN)) - { - return CAMERA_ERROR; - } - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(); - HAL_DCMI_Init(phdcmi); - - if(ov2640_ReadID(CAMERA_I2C_ADDRESS) == OV2640_ID) - { - /* Initialize the camera driver structure */ - camera_drv = &ov2640_drv; - - /* Camera Init */ - camera_drv->Init(CAMERA_I2C_ADDRESS, Resolution); - - /* Return CAMERA_OK status */ - ret = CAMERA_OK; - } - - current_resolution = Resolution; - - return ret; -} - -/** - * @brief Starts the camera capture in continuous mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_ContinuousStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(current_resolution)); -} - -/** - * @brief Starts the camera capture in snapshot mode. - * @param buff: pointer to the camera output buffer - */ -void BSP_CAMERA_SnapshotStart(uint8_t *buff) -{ - /* Start the camera capture */ - HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(current_resolution)); -} - -/** - * @brief Suspend the CAMERA capture - */ -void BSP_CAMERA_Suspend(void) -{ - /* Suspend the Camera Capture */ - HAL_DCMI_Suspend(&hdcmi_eval); -} - -/** - * @brief Resume the CAMERA capture - */ -void BSP_CAMERA_Resume(void) -{ - /* Start the Camera Capture */ - HAL_DCMI_Resume(&hdcmi_eval); -} - -/** - * @brief Stop the CAMERA capture - * @retval Camera status - */ -uint8_t BSP_CAMERA_Stop(void) -{ - DCMI_HandleTypeDef *phdcmi; - - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hdcmi_eval; - - if(HAL_DCMI_Stop(phdcmi) == HAL_OK) - { - ret = CAMERA_OK; - } - - /* Initialize IO */ - BSP_IO_Init(); - - /* Reset the camera STANDBY pin */ - BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT); - BSP_IO_WritePin(XSDN_PIN, RESET); - - return ret; -} - -/** - * @brief Configures the camera contrast and brightness. - * @param contrast_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_CONTRAST_LEVEL4: for contrast +2 - * @arg CAMERA_CONTRAST_LEVEL3: for contrast +1 - * @arg CAMERA_CONTRAST_LEVEL2: for contrast 0 - * @arg CAMERA_CONTRAST_LEVEL1: for contrast -1 - * @arg CAMERA_CONTRAST_LEVEL0: for contrast -2 - * @param brightness_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_BRIGHTNESS_LEVEL4: for brightness +2 - * @arg CAMERA_BRIGHTNESS_LEVEL3: for brightness +1 - * @arg CAMERA_BRIGHTNESS_LEVEL2: for brightness 0 - * @arg CAMERA_BRIGHTNESS_LEVEL1: for brightness -1 - * @arg CAMERA_BRIGHTNESS_LEVEL0: for brightness -2 - */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level); - } -} - -/** - * @brief Configures the camera white balance. - * @param Mode: black_white mode - * This parameter can be one of the following values: - * @arg CAMERA_BLACK_WHITE_BW - * @arg CAMERA_BLACK_WHITE_NEGATIVE - * @arg CAMERA_BLACK_WHITE_BW_NEGATIVE - * @arg CAMERA_BLACK_WHITE_NORMAL - */ -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_BLACK_WHITE, Mode, 0); - } -} - -/** - * @brief Configures the camera color effect. - * @param Effect: Color effect - * This parameter can be one of the following values: - * @arg CAMERA_COLOR_EFFECT_ANTIQUE - * @arg CAMERA_COLOR_EFFECT_BLUE - * @arg CAMERA_COLOR_EFFECT_GREEN - * @arg CAMERA_COLOR_EFFECT_RED - */ -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_COLOR_EFFECT, Effect, 0); - } -} - -/** - * @brief Handles DCMI interrupt request. - */ -void BSP_CAMERA_IRQHandler(void) -{ - HAL_DCMI_IRQHandler(&hdcmi_eval); -} - -/** - * @brief Handles DMA interrupt request. - */ -void BSP_CAMERA_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(hdcmi_eval.DMA_Handle); -} - -/** - * @brief Get the capture size. - * @param resolution: the current resolution. - * @retval capture size. - */ -static uint32_t GetSize(uint32_t resolution) -{ - uint32_t size = 0; - - /* Get capture size */ - switch (resolution) - { - case CAMERA_R160x120: - { - size = 0x2580; - } - break; - case CAMERA_R320x240: - { - size = 0x9600; - } - break; - case CAMERA_R480x272: - { - size = 0xFF00; - } - break; - case CAMERA_R640x480: - { - size = 0x25800; - } - break; - default: - { - break; - } - } - - return size; -} - -/** - * @brief Initializes the DCMI MSP. - */ -__weak void BSP_CAMERA_MspInit(void) -{ - static DMA_HandleTypeDef hdma_eval; - GPIO_InitTypeDef GPIO_Init_Structure; - DCMI_HandleTypeDef *hdcmi = &hdcmi_eval; - - /*** Enable peripherals and GPIO clocks ***/ - /* Enable DCMI clock */ - __HAL_RCC_DCMI_CLK_ENABLE(); - - /* Enable DMA2 clock */ - __HAL_RCC_DMA2_CLK_ENABLE(); - - /* Enable GPIO clocks */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - - /*** Configure the GPIO ***/ - /* Configure DCMI GPIO as alternate function */ - GPIO_Init_Structure.Pin = GPIO_PIN_4; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOA, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_7 | GPIO_PIN_8; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOB, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOC, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_6; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_6; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_6; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOA, &GPIO_Init_Structure); - - /*** Configure the DMA ***/ - /* Set the parameters to be configured */ - hdma_eval.Init.Channel = DMA_CHANNEL_1; - hdma_eval.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_eval.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_eval.Init.MemInc = DMA_MINC_ENABLE; - hdma_eval.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_eval.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_eval.Init.Mode = DMA_CIRCULAR; - hdma_eval.Init.Priority = DMA_PRIORITY_HIGH; - hdma_eval.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_eval.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_eval.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_eval.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_eval.Instance = DMA2_Stream1; - - /* Associate the initialized DMA handle to the DCMI handle */ - __HAL_LINKDMA(hdcmi, DMA_Handle, hdma_eval); - - /*** Configure the NVIC for DCMI and DMA ***/ - /* NVIC configuration for DCMI transfer complete interrupt */ - HAL_NVIC_SetPriority(DCMI_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DCMI_IRQn); - - /* NVIC configuration for DMA2D transfer complete interrupt */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_Init(hdcmi->DMA_Handle); -} - -/** - * @brief Line event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_LineEventCallback(); -} - -/** - * @brief Line Event callback. - */ -__weak void BSP_CAMERA_LineEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_LineEventCallback could be implemented in the user file - */ -} - -/** - * @brief VSYNC event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_VsyncEventCallback(); -} - -/** - * @brief VSYNC Event callback. - */ -__weak void BSP_CAMERA_VsyncEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_VsyncEventCallback could be implemented in the user file - */ -} - -/** - * @brief Frame event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_FrameEventCallback(); -} - -/** - * @brief Frame Event callback. - */ -__weak void BSP_CAMERA_FrameEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_FrameEventCallback could be implemented in the user file - */ -} - -/** - * @brief Error callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_ErrorCallback(); -} - -/** - * @brief Error callback. - */ -__weak void BSP_CAMERA_ErrorCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_ErrorCallback could be implemented in the user file - */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.h deleted file mode 100644 index 23ba4a2bb7..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_camera.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_camera.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_camera.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_CAMERA_H -#define __STM324x9I_EVAL_CAMERA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include Camera component Driver */ -#include "../Components/ov2640/ov2640.h" - -/* Include IO Driver */ -#include "stm324x9i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_CAMERA - * @{ - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Exported_Types STM324x9I EVAL CAMERA Exported Types - * @{ - */ - -/** - * @brief Camera State structures definition - */ -typedef enum -{ - CAMERA_OK = 0x00, - CAMERA_ERROR = 0x01, - CAMERA_TIMEOUT = 0x02 -}Camera_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Exported_Constants STM324x9I EVAL CAMERA Exported Constants - * @{ - */ -#define RESOLUTION_R160x120 CAMERA_R160x120 /* QQVGA Resolution */ -#define RESOLUTION_R320x240 CAMERA_R320x240 /* QVGA Resolution */ -#define RESOLUTION_R480x272 CAMERA_R480x272 /* 480x272 Resolution */ -#define RESOLUTION_R640x480 CAMERA_R640x480 /* VGA Resolution */ -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_CAMERA_Exported_Functions STM324x9I EVAL CAMERA Exported Functions - * @{ - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution); -void BSP_CAMERA_ContinuousStart(uint8_t *buff); -void BSP_CAMERA_SnapshotStart(uint8_t *buff); -void BSP_CAMERA_Suspend(void); -void BSP_CAMERA_Resume(void); -uint8_t BSP_CAMERA_Stop(void); -void BSP_CAMERA_LineEventCallback(void); -void BSP_CAMERA_VsyncEventCallback(void); -void BSP_CAMERA_FrameEventCallback(void); -void BSP_CAMERA_ErrorCallback(void); -void BSP_CAMERA_MspInit(void); -/* Camera features functions prototype */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level); -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode); -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect); - -/* To be called in DCMI_IRQHandler function */ -void BSP_CAMERA_IRQHandler(void); -/* To be called in DMA2_Stream1_IRQHandler function */ -void BSP_CAMERA_DMA_IRQHandler(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_CAMERA_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.c deleted file mode 100644 index cf8011eeb3..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.c +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24LR64 - * EEPROM memory. - * To be able to use this driver, the switch EE_M24LR64 must be defined - * in your toolchain compiler preprocessor - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24LR64) is available on separate daughter - * board ANT7-M24LR-A, which is not provided with the STM324x9I_EVAL - * board. - * To use this driver you have to connect the ANT7-M24LR-A to CN3 - * connector of STM324x9I_EVAL board. - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm324x9i_eval.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm324x9i_eval.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and BSP_EEPROM_WritePage()) use DMA mode to perform the data - * transfer to/from EEPROM memory. - * - * @note Regarding BSP_EEPROM_WritePage(), it is a optimized function to perform - * small write (less than 1 page) BUT The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24LR64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0(GND) | 1 (0V) | - * | . | AC0 | 2 | - * | . | AC1 | 3 | - * | . | VSS | 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | . | E1(GND) | 7 (0V) | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_EEPROM STM324x9I EVAL EEPROM - * @brief This file includes the I2C EEPROM driver of STM324x9I-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM324x9I_EVAL_EEPROM_Private_Variables STM324x9I EVAL EEPROM Private Variables - * @{ - */ -__IO uint16_t EEPROMAddress = 0; -__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_EEPROM_Private_Function_Prototypes STM324x9I EVAL EEPROM Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_EEPROM_Private_Functions STM324x9I EVAL EEPROM Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * - * @note There are 2 different versions of M24LR64 (A01 & A02). - * Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) - * and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02) - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address for A01 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A01; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* Select the EEPROM address for A02 and check if OK */ - EEPROMAddress = EEPROM_I2C_ADDRESS_A02; - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - } - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage== 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.h deleted file mode 100644 index a9e441d6a5..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_eeprom.h +++ /dev/null @@ -1,110 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm324x9i_eval_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4x9I_EVAL_EEPROM_H -#define __STM32F4x9I_EVAL_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_EEPROM - * @brief This file includes the I2C EEPROM driver of STM324x9I-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM324x9I_EVAL_EEPROM_Exported_Constants STM324x9I EVAL EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE 4 -#define EEPROM_MAX_SIZE 0x2000 /* 64Kbit */ - -/* Maximum Timeout values for flags and events waiting loops. -This timeout is based on systick set to 1ms*/ -/* Timeout for read based if read all the EEPROM : EEPROM_MAX_SIZE * BSP_I2C_SPEED (640ms) */ -#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) -/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * BSP_I2C_SPEED (320us) */ -#define EEPROM_WRITE_TIMEOUT ((uint32_t)(10)) - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS 3000 - -#define EEPROM_OK 0 -#define EEPROM_FAIL 1 -#define EEPROM_TIMEOUT 2 -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_EEPROM_Exported_Functions STM324x9I EVAL EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occurs during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_EEPROM_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.c deleted file mode 100644 index 8e31c9aebb..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.c +++ /dev/null @@ -1,208 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_io.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the IO pins - * on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IO module of the STM324x9I-EVAL evaluation - board. - - The STMPE1600 IO expander device component driver must be included with this - driver in order to run the IO functionalities commanded by the IO expander - device mounted on the evaluation board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the IO module using the BSP_IO_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the IO functionalities use. - - + IO functionalities use - o The IO pin mode is configured when calling the function BSP_IO_ConfigPin(), you - must specify the desired IO mode by choosing the "IO_ModeTypedef" parameter - predefined value. - o If an IO pin is used in interrupt mode, the function BSP_IO_ITGetStatus() is - needed to get the interrupt status. To clear the IT pending bits, you should - call the function BSP_IO_ITClear() with specifying the IO pending bit to clear. - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - o To get/set an IO pin combination state you can use the functions - BSP_IO_ReadPin()/BSP_IO_WritePin() or the function BSP_IO_TogglePin() to toggle the pin - state. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_IO STM324x9I EVAL IO - * @{ - */ - -/** @defgroup STM324x9I_EVAL_IO_Private_Variables STM324x9I EVAL IO Private Variables - * @{ - */ -static IO_DrvTypeDef *io_driver; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_IO_Private_Functions STM324x9I EVAL IO Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the IO functionalities and configures all - * necessary hardware resources (GPIOs, clocks..). - * @note BSP_IO_Init() is using HAL_Delay() function to ensure that stmpe1600 - * IO Expander is correctly reset. HAL_Delay() function provides accurate - * delay (in milliseconds) based on variable incremented in SysTick ISR. - * This implies that if BSP_IO_Init() is called from a peripheral ISR process, - * then the SysTick interrupt must have higher priority (numerically lower) - * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_Init(void) -{ - uint8_t ret = IO_ERROR; - - /* Read ID and verify the IO expander is ready */ - if(stmpe1600_io_drv.ReadID(IO_I2C_ADDRESS) == STMPE1600_ID) - { - /* Initialize the IO driver structure */ - io_driver = &stmpe1600_io_drv; - ret = IO_OK; - } - - if(ret == IO_OK) - { - io_driver->Init(IO_I2C_ADDRESS); - io_driver->Start(IO_I2C_ADDRESS, IO_PIN_ALL); - } - return ret; -} - -/** - * @brief Gets the selected pins IT status. - * @param IO_Pin: Selected pins to check the status. - * This parameter can be any combination of the IO pins. - * @retval IO_OK if read status OK. Other value if error. - */ -uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin) -{ - /* Return the IO Pin IT status */ - return (io_driver->ITStatus(IO_I2C_ADDRESS, IO_Pin)); -} - -/** - * @brief Clears all the IO IT pending bits. - */ -void BSP_IO_ITClear(void) -{ - /* Clear all IO IT pending bits */ - io_driver->ClearIT(IO_I2C_ADDRESS, STMPE1600_PIN_ALL); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param IO_Pin: IO pin(s) to be configured. - * This parameter can be one of the following values: - * @arg STMPE1600_PIN_x: where x can be from 0 to 15. - * @param IO_Mode: IO pin mode to configure - * This parameter can be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @retval IO_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - /* Configure the selected IO pin(s) mode */ - io_driver->Config(IO_I2C_ADDRESS, (uint16_t )IO_Pin, IO_Mode); - - return IO_OK; -} - -/** - * @brief Sets the selected pins state. - * @param IO_Pin: Selected pins to write. - * This parameter can be any combination of the IO pins. - * @param PinState: New pins state to write - */ -void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState) -{ - /* Set the Pin state */ - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, PinState); -} - -/** - * @brief Gets the selected pins current state. - * @param IO_Pin: Selected pins to read. - * This parameter can be any combination of the IO pins. - * @retval The current pins state - */ -uint16_t BSP_IO_ReadPin(uint16_t IO_Pin) -{ - return(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin)); -} - -/** - * @brief Toggles the selected pins state. - * @param IO_Pin: Selected pins to toggle. - * This parameter can be any combination of the IO pins. - */ -void BSP_IO_TogglePin(uint16_t IO_Pin) -{ - /* Toggle the current pin state */ - if(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin) == 1) /* Set */ - { - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 0); /* Reset */ - } - else - { - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 1); /* Set */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.h deleted file mode 100644 index 5b104c82e4..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_io.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_io.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_io.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_IO_H -#define __STM324x9I_EVAL_IO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval.h" -/* Include IO component driver */ -#include "../Components/stmpe1600/stmpe1600.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_IO - * @{ - */ - -/** @defgroup STM324x9I_EVAL_IO_Exported_Types STM324x9I EVAL IO Exported Types - * @{ - */ -typedef struct -{ - uint16_t TouchDetected; - uint16_t x; - uint16_t y; - uint16_t z; -}IO_StateTypeDef; - -typedef enum -{ - IO_OK = 0, - IO_ERROR = 1, - IO_TIMEOUT = 2 -}IO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_IO_Exported_Constants IO Exported Constants - * @{ - */ -#define IO_PIN_0 0x0001 -#define IO_PIN_1 0x0002 -#define IO_PIN_2 0x0004 -#define IO_PIN_3 0x0008 -#define IO_PIN_4 0x0010 -#define IO_PIN_5 0x0020 -#define IO_PIN_6 0x0040 -#define IO_PIN_7 0x0080 -#define IO_PIN_8 0x0100 -#define IO_PIN_9 0x0200 -#define IO_PIN_10 0x0400 -#define IO_PIN_11 0x0800 -#define IO_PIN_12 0x1000 -#define IO_PIN_13 0x2000 -#define IO_PIN_14 0x4000 -#define IO_PIN_15 0x8000 -#define IO_PIN_ALL 0xFFFF -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_IO_Exported_Functions STM324x9I EVAL IO Exported Functions - * @{ - */ -uint8_t BSP_IO_Init(void); -uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin); -void BSP_IO_ITClear(void); -uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode); -void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState); -uint16_t BSP_IO_ReadPin(uint16_t IO_Pin); -void BSP_IO_TogglePin(uint16_t IO_Pin); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_IO_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.c deleted file mode 100644 index fe143fc797..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.c +++ /dev/null @@ -1,1451 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive directly an LCD TFT using the LTDC controller. - - This driver selects dynamically the mounted LCD, AMPIRE 640x480 LCD mounted - on MB1063 or AMPIRE 480x272 LCD mounted on MB1046 daughter board, - and uses the adequate timing and setting for the specified LCD using - device ID of the STMPE811 mounted on MB1046 daughter board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - o Apply the Layer configuration using the BSP_LCD_LayerDefaultInit() function. - o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. - o Enable the LCD display using the BSP_LCD_DisplayOn() function. - - + Options - o Configure and enable the color keying functionality using the - BSP_LCD_SetColorKeying() function. - o Modify in the fly the transparency and/or the frame buffer address - using the following functions: - - BSP_LCD_SetTransparency() - - BSP_LCD_SetLayerAddress() - - + Display on LCD - o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LCD STM324x9I EVAL LCD - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LCD_Private_Macros STM324x9I EVAL LCD Private Macros - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + Z)->X)) -#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LCD_Private_Variables STM324x9I EVAL LCD Private Variables - * @{ - */ -LTDC_HandleTypeDef hltdc_eval; -static DMA2D_HandleTypeDef hdma2d_eval; -static uint32_t PCLK_profile = LCD_MAX_PCLK; - -/* Default LCD configuration with LCD Layer 1 */ -static uint32_t ActiveLayer = 0; -static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER]; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LCD_Private_FunctionPrototypes STM324x9I EVAL LCD Private FunctionPrototypes - * @{ - */ -static void MspInit(void); -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex); -static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode); -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LCD_Private_Functions STM324x9I EVAL LCD Private Functions - * @{ - */ -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - return (BSP_LCD_InitEx(LCD_MAX_PCLK)); -} - -/** - * @brief Initializes the LCD. - * @param PclkConfig : pixel clock profile - * @retval LCD state - */ -uint8_t BSP_LCD_InitEx(uint32_t PclkConfig) -{ - PCLK_profile = PclkConfig; - - /* Select the used LCD */ - /* The AMPIRE 480x272 does not contain an ID register then we check the availability - of AMPIRE 480x640 LCD using device ID of the STMPE811 mounted on MB1046 daughter board */ - if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) - { - /* The AMPIRE LCD 480x272 is selected */ - /* Timing Configuration */ - hltdc_eval.Init.HorizontalSync = (AMPIRE480272_HSYNC - 1); - hltdc_eval.Init.VerticalSync = (AMPIRE480272_VSYNC - 1); - hltdc_eval.Init.AccumulatedHBP = (AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); - hltdc_eval.Init.AccumulatedVBP = (AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); - hltdc_eval.Init.AccumulatedActiveH = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP - 1); - hltdc_eval.Init.AccumulatedActiveW = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP - 1); - hltdc_eval.Init.TotalHeigh = (AMPIRE480272_HEIGHT + AMPIRE480272_VSYNC + AMPIRE480272_VBP + AMPIRE480272_VFP - 1); - hltdc_eval.Init.TotalWidth = (AMPIRE480272_WIDTH + AMPIRE480272_HSYNC + AMPIRE480272_HBP + AMPIRE480272_HFP - 1); - - /* Initialize the LCD pixel width and pixel height */ - hltdc_eval.LayerCfg->ImageWidth = AMPIRE480272_WIDTH; - hltdc_eval.LayerCfg->ImageHeight = AMPIRE480272_HEIGHT; - } - else - { - /* The LCD AMPIRE 640x480 is selected */ - /* Timing configuration */ - hltdc_eval.Init.HorizontalSync = (AMPIRE640480_HSYNC - 1); - hltdc_eval.Init.VerticalSync = (AMPIRE640480_VSYNC - 1); - hltdc_eval.Init.AccumulatedHBP = (AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); - hltdc_eval.Init.AccumulatedVBP = (AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); - hltdc_eval.Init.AccumulatedActiveH = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1); - hltdc_eval.Init.AccumulatedActiveW = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1); - hltdc_eval.Init.TotalHeigh = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP + AMPIRE640480_VFP - 1); - hltdc_eval.Init.TotalWidth = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP + AMPIRE640480_HFP - 1); - - /* Initialize the LCD pixel width and pixel height */ - hltdc_eval.LayerCfg->ImageWidth = AMPIRE640480_WIDTH; - hltdc_eval.LayerCfg->ImageHeight = AMPIRE640480_HEIGHT; - } - - /* Background value */ - hltdc_eval.Init.Backcolor.Blue = 0; - hltdc_eval.Init.Backcolor.Green = 0; - hltdc_eval.Init.Backcolor.Red = 0; - - /* Polarity */ - hltdc_eval.Init.HSPolarity = LTDC_HSPOLARITY_AL; - hltdc_eval.Init.VSPolarity = LTDC_VSPOLARITY_AL; - hltdc_eval.Init.DEPolarity = LTDC_DEPOLARITY_AL; - hltdc_eval.Init.PCPolarity = LTDC_PCPOLARITY_IPC; - hltdc_eval.Instance = LTDC; - - /* LCD clock configuration */ - BSP_LCD_ClockConfig(&hltdc_eval, &PCLK_profile); - - MspInit(); - HAL_LTDC_Init(&hltdc_eval); - -#if !defined(DATA_IN_ExtSDRAM) - /* Initialize the SDRAM */ - BSP_SDRAM_Init(); -#endif /* DATA_IN_ExtSDRAM */ - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - return LCD_OK; -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return hltdc_eval.LayerCfg[ActiveLayer].ImageWidth; -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return hltdc_eval.LayerCfg[ActiveLayer].ImageHeight; -} - -/** - * @brief Initializes the LCD layers. - * @param LayerIndex: Layer foreground or background - * @param FB_Address: Layer frame buffer - */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) -{ - LCD_LayerCfgTypeDef Layercfg; - - /* Layer Init */ - Layercfg.WindowX0 = 0; - Layercfg.WindowX1 = BSP_LCD_GetXSize(); - Layercfg.WindowY0 = 0; - Layercfg.WindowY1 = BSP_LCD_GetYSize(); - Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; - Layercfg.FBStartAdress = FB_Address; - Layercfg.Alpha = 255; - Layercfg.Alpha0 = 0; - Layercfg.Backcolor.Blue = 0; - Layercfg.Backcolor.Green = 0; - Layercfg.Backcolor.Red = 0; - Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; - Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; - Layercfg.ImageWidth = BSP_LCD_GetXSize(); - Layercfg.ImageHeight = BSP_LCD_GetYSize(); - - HAL_LTDC_ConfigLayer(&hltdc_eval, &Layercfg, LayerIndex); - - DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE; - DrawProp[LayerIndex].pFont = &Font24; - DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; -} - -/** - * @brief Selects the LCD Layer. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_SelectLayer(uint32_t LayerIndex) -{ - ActiveLayer = LayerIndex; -} - -/** - * @brief Sets an LCD Layer visible - * @param LayerIndex: Visible Layer - * @param State: New state of the specified layer - * This parameter can be one of the following values: - * @arg ENABLE - * @arg DISABLE - */ -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State) -{ - if(State == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&hltdc_eval, LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&hltdc_eval, LayerIndex); - } - __HAL_LTDC_RELOAD_CONFIG(&hltdc_eval); -} - -/** - * @brief Sets an LCD Layer visible without reloading. - * @param LayerIndex: Visible Layer - * @param State: New state of the specified layer - * This parameter can be one of the following values: - * @arg ENABLE - * @arg DISABLE - * @retval None - */ -void BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State) -{ - if(State == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&hltdc_eval, LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&hltdc_eval, LayerIndex); - } - /* Do not Sets the Reload */ -} - -/** - * @brief Configures the transparency. - * @param LayerIndex: Layer foreground or background. - * @param Transparency: Transparency - * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF - */ -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency) -{ - HAL_LTDC_SetAlpha(&hltdc_eval, Transparency, LayerIndex); -} - -/** - * @brief Configures the transparency without reloading. - * @param LayerIndex: Layer foreground or background. - * @param Transparency: Transparency - * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF - * @retval None - */ -void BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency) -{ - HAL_LTDC_SetAlpha_NoReload(&hltdc_eval, Transparency, LayerIndex); -} - -/** - * @brief Sets an LCD layer frame buffer address. - * @param LayerIndex: Layer foreground or background - * @param Address: New LCD frame buffer value - */ -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address) -{ - HAL_LTDC_SetAddress(&hltdc_eval, Address, LayerIndex); -} - -/** - * @brief Sets an LCD layer frame buffer address without reloading. - * @param LayerIndex: Layer foreground or background - * @param Address: New LCD frame buffer value - * @retval None - */ -void BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address) -{ - HAL_LTDC_SetAddress_NoReload(&hltdc_eval, Address, LayerIndex); -} - -/** - * @brief Sets display window. - * @param LayerIndex: Layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Reconfigure the layer size */ - HAL_LTDC_SetWindowSize(&hltdc_eval, Width, Height, LayerIndex); - - /* Reconfigure the layer position */ - HAL_LTDC_SetWindowPosition(&hltdc_eval, Xpos, Ypos, LayerIndex); -} - -/** - * @brief Sets display window without reloading. - * @param LayerIndex: Layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - * @retval None - */ -void BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Reconfigure the layer size */ - HAL_LTDC_SetWindowSize_NoReload(&hltdc_eval, Width, Height, LayerIndex); - - /* Reconfigure the layer position */ - HAL_LTDC_SetWindowPosition_NoReload(&hltdc_eval, Xpos, Ypos, LayerIndex); -} - -/** - * @brief Configures and sets the color keying. - * @param LayerIndex: Layer foreground or background - * @param RGBValue: Color reference - */ -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying(&hltdc_eval, RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying(&hltdc_eval, LayerIndex); -} - -/** - * @brief Configures and sets the color keying without reloading. - * @param LayerIndex: Layer foreground or background - * @param RGBValue: Color reference - * @retval None - */ -void BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying_NoReload(&hltdc_eval, RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying_NoReload(&hltdc_eval, LayerIndex); -} - -/** - * @brief Disables the color keying. - * @param LayerIndex: Layer foreground or background - */ -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying(&hltdc_eval, LayerIndex); -} - -/** - * @brief Disables the color keying without reloading. - * @param LayerIndex: Layer foreground or background - * @retval None - */ -void BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying_NoReload(&hltdc_eval, LayerIndex); -} - -/** - * @brief Disables the color keying without reloading. - * @param ReloadType: can be one of the following values - * - LCD_RELOAD_IMMEDIATE - * - LCD_RELOAD_VERTICAL_BLANKING - * @retval None - */ -void BSP_LCD_Relaod(uint32_t ReloadType) -{ - HAL_LTDC_Relaod (&hltdc_eval, ReloadType); -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetTextColor(uint32_t Color) -{ - DrawProp[ActiveLayer].TextColor = Color; -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint32_t BSP_LCD_GetTextColor(void) -{ - return DrawProp[ActiveLayer].TextColor; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Layer background color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetBackColor(uint32_t Color) -{ - DrawProp[ActiveLayer].BackColor = Color; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint32_t BSP_LCD_GetBackColor(void) -{ - return DrawProp[ActiveLayer].BackColor; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Layer font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp[ActiveLayer].pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used layer font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp[ActiveLayer].pFont; -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint32_t ret = 0; - - if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else if(hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888) - { - /* Read data value from SDRAM memory */ - ret = (*(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF); - } - else if((hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ - (hltdc_eval.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88)) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint16_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - else - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint8_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); - } - - return ret; -} - -/** - * @brief Clears the hole LCD. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint32_t Color) -{ - /* Clear the LCD */ - LL_FillBuffer(ActiveLayer, (uint32_t *)(hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color); -} - -/** - * @brief Clears the selected line. - * @param Line: Line to be cleared - */ -void BSP_LCD_ClearStringLine(uint32_t Line) -{ - uint32_t color_backup = DrawProp[ActiveLayer].TextColor; - DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor; - - /* Draw rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height); - - DrawProp[ActiveLayer].TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\ - DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters on the LCD. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Send the string character by character on LCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp[ActiveLayer].pFont->Width; - /* Point on the next character */ - Text++; - i++; - } -} - -/** - * @brief Displays a maximum of 60 characters on the LCD. - * @param Line: Line where to display the character shape - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Draws an horizontal line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a vertical line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t Xaddress = 0; - - /* Get the line address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Write line */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws an uni-line (between two points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - CurX = 0; - CurY = Radius; - - while (CurX <= CurY) - { - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos - CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos - CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos + CurY), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos + CurX), DrawProp[ActiveLayer].TextColor); - - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } -} - -/** - * @brief Draws an poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - BSP_LCD_DrawLine(X, Y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos+y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos-y), DrawProp[ActiveLayer].TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture loaded in the internal Flash (32 bpp). - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address in the internal Flash - */ -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp) -{ - uint32_t index = 0, width = 0, height = 0, bit_pixel = 0; - uint32_t Address; - uint32_t InputColorMode = 0; - - /* Get bitmap data address offset */ - index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16) + (pbmp[13] << 24); - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - /* Read bit/pixel */ - bit_pixel = pbmp[28] + (pbmp[29] << 8); - - /* Set the address */ - Address = hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); - - /* Get the layer pixel format */ - if ((bit_pixel/8) == 4) - { - InputColorMode = CM_ARGB8888; - } - else if ((bit_pixel/8) == 2) - { - InputColorMode = CM_RGB565; - } - else - { - InputColorMode = CM_RGB888; - } - - /* Bypass the bitmap header */ - pbmp += (index + (width * (height - 1) * (bit_pixel/8))); - - /* Convert picture to ARGB8888 pixel format */ - for(index=0; index < height; index++) - { - /* Pixel format conversion */ - LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)Address, width, InputColorMode); - - /* Increment the source and destination buffers */ - Address+= (BSP_LCD_GetXSize()*4); - pbmp -= width*(bit_pixel/8); - } -} - -/** - * @brief Draws a full rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - uint32_t Xaddress = 0; - - /* Set the text color */ - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - /* Get the rectangle start address */ - Xaddress = (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); - - /* Fill the rectangle */ - LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Draws a full circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - - CurX = 0; - CurY = Radius; - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - while (CurX <= CurY) - { - if(CurY > 0) - { - BSP_LCD_DrawHLine(Xpos - CurY, Ypos + CurX, 2*CurY); - BSP_LCD_DrawHLine(Xpos - CurY, Ypos - CurX, 2*CurY); - } - - if(CurX > 0) - { - BSP_LCD_DrawHLine(Xpos - CurX, Ypos - CurY, 2*CurX); - BSP_LCD_DrawHLine(Xpos - CurX, Ypos + CurY, 2*CurX); - } - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos+y), (2*(uint16_t)(x/K) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos-y), (2*(uint16_t)(x/K) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Enables the display. - */ -void BSP_LCD_DisplayOn(void) -{ - /* Display On */ - __HAL_LTDC_ENABLE(&hltdc_eval); -} - -/** - * @brief Disables the display. - */ -void BSP_LCD_DisplayOff(void) -{ - /* Display Off */ - __HAL_LTDC_DISABLE(&hltdc_eval); -} - -/******************************************************************************* - LTDC and DMA2D BSP Routines -*******************************************************************************/ - -/** - * @brief Initializes the LTDC MSP. - */ -static void MspInit(void) -{ - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Enable the LTDC and DMA2D clocks */ - __HAL_RCC_LTDC_CLK_ENABLE(); - __HAL_RCC_DMA2D_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOI_CLK_ENABLE(); - __HAL_RCC_GPIOJ_CLK_ENABLE(); - __HAL_RCC_GPIOK_CLK_ENABLE(); - - /*** LTDC Pins configuration ***/ - /* GPIOI configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_NOPULL; - GPIO_Init_Structure.Speed = GPIO_SPEED_FAST; - GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC; - HAL_GPIO_Init(GPIOI, &GPIO_Init_Structure); - - /* GPIOJ configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \ - GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \ - GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_NOPULL; - GPIO_Init_Structure.Speed = GPIO_SPEED_FAST; - GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC; - HAL_GPIO_Init(GPIOJ, &GPIO_Init_Structure); - - /* GPIOK configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \ - GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_NOPULL; - GPIO_Init_Structure.Speed = GPIO_SPEED_FAST; - GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC; - HAL_GPIO_Init(GPIOK, &GPIO_Init_Structure); -} - -/** - * @brief Clock Config. - * @param hltdc: LTDC handle - * @param Params: LTDC pixel clock - * @note This API is called by BSP_LCD_Init() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params) -{ - static RCC_PeriphCLKInitTypeDef periph_clk_init_struct; - - if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) - { - /* AMPIRE480272 LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 Mhz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6Mhz */ - periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - periph_clk_init_struct.PLLSAI.PLLSAIN = 192; - periph_clk_init_struct.PLLSAI.PLLSAIR = AMPIRE480272_FREQUENCY_DIVIDER; - periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_4; - HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct); - } - else - { - /* The programmed LTDC pixel clock depends on the vertical refresh rate of the panel 60Hz => 25.16MHz and - the LCD/SDRAM bandwidth affected by the several access on the bus and the number of used layers. - */ - if(*(uint32_t *)Params == LCD_MAX_PCLK) - { - /* In case of single layer the bandwidth is around 160MBytesPerSec ==> theoretical PCLK of 40MHz */ - /* AMPIRE640480 typical PCLK is 25.16 MHz so the PLLSAI is configured to provide this clock */ - /* AMPIRE640480 LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 151 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 151/3 = 50.3 Mhz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_2 = 50.3/2 = 25.16 Mhz */ - periph_clk_init_struct.PLLSAI.PLLSAIN = 151; - } - else - { - /* In case of double layers the bandwidth is around 72MBytesPerSec => 18MHz (<25,16MHz) */ - /* so the PLLSAI is configured to provide this clock */ - /* AMPIRE640480 LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 108 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 108/3 = 36 Mhz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_2 = 36/2 = 18 Mhz */ - periph_clk_init_struct.PLLSAI.PLLSAIN = 108; - } - periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - periph_clk_init_struct.PLLSAI.PLLSAIR = 3; - periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_2; - HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct); - } -} -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code) -{ - /* Write data value to all SDRAM memory */ - *(__IO uint32_t*) (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code; -} - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp[ActiveLayer].pFont->Height; - width = DrawProp[ActiveLayer].pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Fills a buffer. - * @param LayerIndex: Layer index - * @param pDst: Pointer to destination buffer - * @param xSize: Buffer width - * @param ySize: Buffer height - * @param OffLine: Offset - * @param ColorIndex: Color index - */ -static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex) -{ - /* Register to memory mode with ARGB8888 as color Mode */ - hdma2d_eval.Init.Mode = DMA2D_R2M; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = OffLine; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, LayerIndex) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @brief Converts a line to an ARGB8888 pixel format. - * @param pSrc: Pointer to source buffer - * @param pDst: Output color - * @param xSize: Buffer width - * @param ColorMode: Input color mode - */ -static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode) -{ - /* Configure the DMA2D Mode, Color Mode and output offset */ - hdma2d_eval.Init.Mode = DMA2D_M2M_PFC; - hdma2d_eval.Init.ColorMode = DMA2D_ARGB8888; - hdma2d_eval.Init.OutputOffset = 0; - - /* Foreground Configuration */ - hdma2d_eval.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; - hdma2d_eval.LayerCfg[1].InputAlpha = 0xFF; - hdma2d_eval.LayerCfg[1].InputColorMode = ColorMode; - hdma2d_eval.LayerCfg[1].InputOffset = 0; - - hdma2d_eval.Instance = DMA2D; - - /* DMA2D Initialization */ - if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK) - { - if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, 1) == HAL_OK) - { - if (HAL_DMA2D_Start(&hdma2d_eval, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&hdma2d_eval, 10); - } - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.h deleted file mode 100644 index c21f5b47a6..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_lcd.h +++ /dev/null @@ -1,236 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_LCD_H -#define __STM324x9I_EVAL_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include LCD component Driver */ -/* LCD integrated within MB1063 */ -#include "../Components/ampire640480/ampire640480.h" -/* LCD integrated within MB1046 */ -#include "../Components/ampire480272/ampire480272.h" - -/* Include IOExpander(STMPE811) component Driver */ -#include "../Components/stmpe811/stmpe811.h" - -/* Include SDRAM Driver */ -#include "stm324x9i_eval_sdram.h" - -#include "stm324x9i_eval.h" -#include "../../../Utilities/Fonts/fonts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_LCD - * @{ - */ - -/** @defgroup STM324x9I_EVAL_LCD_Exported_Types STM324x9I EVAL LCD Exported Types - * @{ - */ -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -}LCD_DrawPropTypeDef; - -typedef struct -{ - int16_t X; - int16_t Y; -}Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* Center mode */ - RIGHT_MODE = 0x02, /* Right mode */ - LEFT_MODE = 0x03 /* Left mode */ -}Text_AlignModeTypdef; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LCD_Exported_Constants STM324x9I EVAL LCD Exported Constants - * @{ - */ -#define MAX_LAYER_NUMBER 2 - -#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef - -/** - * @brief LCD status structure definition - */ -#define LCD_OK 0x00 -#define LCD_ERROR 0x01 -#define LCD_TIMEOUT 0x02 - -/** - * @brief LCD FB_StartAddress - */ -#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000) - -/* The programmed LTDC pixel clock depends on the vertical refresh rate of the panel 60Hz => 25.16MHz and - the LCD/SDRAM bandwidth affected by the several access on the bus and the number of used layers. - when only one layer is enabled "LCD_MAX_PCLK" can be used and when two layers are enabled simultaneously - or/and there is several access on the bus "LCD_MIN_PCLK" parameter is recommended */ -#define LCD_MAX_PCLK ((uint8_t)0x00) -#define LCD_MIN_PCLK ((uint8_t)0x01) - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE 0xFF0000FF -#define LCD_COLOR_GREEN 0xFF00FF00 -#define LCD_COLOR_RED 0xFFFF0000 -#define LCD_COLOR_CYAN 0xFF00FFFF -#define LCD_COLOR_MAGENTA 0xFFFF00FF -#define LCD_COLOR_YELLOW 0xFFFFFF00 -#define LCD_COLOR_LIGHTBLUE 0xFF8080FF -#define LCD_COLOR_LIGHTGREEN 0xFF80FF80 -#define LCD_COLOR_LIGHTRED 0xFFFF8080 -#define LCD_COLOR_LIGHTCYAN 0xFF80FFFF -#define LCD_COLOR_LIGHTMAGENTA 0xFFFF80FF -#define LCD_COLOR_LIGHTYELLOW 0xFFFFFF80 -#define LCD_COLOR_DARKBLUE 0xFF000080 -#define LCD_COLOR_DARKGREEN 0xFF008000 -#define LCD_COLOR_DARKRED 0xFF800000 -#define LCD_COLOR_DARKCYAN 0xFF008080 -#define LCD_COLOR_DARKMAGENTA 0xFF800080 -#define LCD_COLOR_DARKYELLOW 0xFF808000 -#define LCD_COLOR_WHITE 0xFFFFFFFF -#define LCD_COLOR_LIGHTGRAY 0xFFD3D3D3 -#define LCD_COLOR_GRAY 0xFF808080 -#define LCD_COLOR_DARKGRAY 0xFF404040 -#define LCD_COLOR_BLACK 0xFF000000 -#define LCD_COLOR_BROWN 0xFFA52A2A -#define LCD_COLOR_ORANGE 0xFFFFA500 -#define LCD_COLOR_TRANSPARENT 0xFF000000 - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @brief LCD Reload Types - */ -#define LCD_RELOAD_IMMEDIATE ((uint32_t)LTDC_SRCR_IMR) -#define LCD_RELOAD_VERTICAL_BLANKING ((uint32_t)LTDC_SRCR_VBR) - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_LCD_Exported_Functions STM324x9I EVAL LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_InitEx(uint32_t PclkConfig); - -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -/* Functions using the LTDC controller */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer); -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex); -void BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex); -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_SelectLayer(uint32_t LayerIndex); -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State); -void BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State); -void BSP_LCD_Relaod(uint32_t ReloadType); - -void BSP_LCD_SetTextColor(uint32_t Color); -uint32_t BSP_LCD_GetTextColor(void); -void BSP_LCD_SetBackColor(uint32_t Color); -uint32_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel); -void BSP_LCD_Clear(uint32_t Color); -void BSP_LCD_ClearStringLine(uint32_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp); - -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_LCD_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.c deleted file mode 100644 index 1534de9ad6..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.c +++ /dev/null @@ -1,342 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_nor.c - * @author MCD Application Team - * @brief This file includes a standard driver for the M29W256GL70ZA6E NOR flash memory - * device mounted on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the M29W128GL NOR flash external memory mounted - on STM324x9I-EVAL evaluation board. - - This driver does not need a specific component driver for the NOR device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the NOR external memory using the BSP_NOR_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external NOR memory. - - + NOR flash operations - o NOR external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_NOR_ReadData()/BSP_NOR_WriteData(). The BSP_NOR_WriteData() performs write operation - of an amount of data by unit (halfword). You can also perform a program data - operation of an amount of data using the function BSP_NOR_ProgramData(). - o The function BSP_NOR_Read_ID() returns the chip IDs stored in the structure - "NOR_IDTypeDef". (see the NOR IDs in the memory data sheet) - o Perform erase block operation using the function BSP_NOR_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_NOR_Erase_Chip(). - o After other operations, the function BSP_NOR_ReturnToReadMode() allows the NOR - flash to return to read mode to perform read operations on it. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_nor.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_NOR STM324x9I EVAL NOR - * @{ - */ - -/** @defgroup STM324x9I_EVAL_NOR_Private_Variables STM324x9I EVAL NOR Private Variables - * @{ - */ -static NOR_HandleTypeDef norHandle; -static FMC_NORSRAM_TimingTypeDef Timing; - -/** - * @} - */ - -/** - * @brief Initializes the NOR device. - * @retval NOR memory status - */ -uint8_t BSP_NOR_Init(void) -{ - norHandle.Instance = FMC_NORSRAM_DEVICE; - norHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - /* NOR device configuration */ - Timing.AddressSetupTime = 4; - Timing.AddressHoldTime = 3; - Timing.DataSetupTime = 7; - Timing.BusTurnAroundDuration = 1; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FMC_ACCESS_MODE_A; - - norHandle.Init.NSBank = FMC_NORSRAM_BANK1; - norHandle.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - norHandle.Init.MemoryType = FMC_MEMORY_TYPE_NOR; - norHandle.Init.MemoryDataWidth = NOR_MEMORY_WIDTH; - norHandle.Init.BurstAccessMode = NOR_BURSTACCESS; - norHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - norHandle.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - norHandle.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - norHandle.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - norHandle.Init.WaitSignal = FMC_WAIT_SIGNAL_ENABLE; - norHandle.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - norHandle.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE; - norHandle.Init.WriteBurst = NOR_WRITEBURST; - norHandle.Init.ContinuousClock = CONTINUOUSCLOCK_FEATURE; - - /* NOR controller initialization */ - BSP_NOR_MspInit(); - - if(HAL_NOR_Init(&norHandle, &Timing, &Timing) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Reads an amount of data from the NOR device. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of data to read - * @retval NOR memory status - */ -uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - if(HAL_NOR_ReadBuffer(&norHandle, NOR_DEVICE_ADDR + uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Returns the NOR memory to read mode. - */ -void BSP_NOR_ReturnToReadMode(void) -{ - HAL_NOR_ReturnToReadMode(&norHandle); -} - -/** - * @brief Writes an amount of data to the NOR device. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of data to write - * @retval NOR memory status - */ -uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - uint32_t index = uwDataSize; - - while(index > 0) - { - /* Write data to NOR */ - HAL_NOR_Program(&norHandle, (uint32_t *)(NOR_DEVICE_ADDR + uwStartAddress), pData); - - /* Read NOR device status */ - if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != NOR_SUCCESS) - { - return NOR_STATUS_ERROR; - } - - /* Update the counters */ - index--; - uwStartAddress += 2; - pData++; - } - - return NOR_STATUS_OK; -} - -/** - * @brief Programs an amount of data to the NOR device. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of data to write - * @retval NOR memory status - */ -uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t* pData, uint32_t uwDataSize) -{ - /* Send NOR program buffer operation */ - HAL_NOR_ProgramBuffer(&norHandle, uwStartAddress, pData, uwDataSize); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, PROGRAM_TIMEOUT) != NOR_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Erases the specified block of the NOR device. - * @param BlockAddress: Block address to erase - * @retval NOR memory status - */ -uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress) -{ - /* Send NOR erase block operation */ - HAL_NOR_Erase_Block(&norHandle, BlockAddress, NOR_DEVICE_ADDR); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, BLOCKERASE_TIMEOUT) != NOR_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Erases the entire NOR chip. - * @retval NOR memory status - */ -uint8_t BSP_NOR_Erase_Chip(void) -{ - /* Send NOR Erase chip operation */ - HAL_NOR_Erase_Chip(&norHandle, NOR_DEVICE_ADDR); - - /* Return the NOR memory status */ - if(HAL_NOR_GetStatus(&norHandle, NOR_DEVICE_ADDR, CHIPERASE_TIMEOUT) != NOR_SUCCESS) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Reads NOR flash IDs. - * @param pNOR_ID : Pointer to NOR ID structure - * @retval NOR memory status - */ -uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID) -{ - if(HAL_NOR_Read_ID(&norHandle, pNOR_ID) != HAL_OK) - { - return NOR_STATUS_ERROR; - } - else - { - return NOR_STATUS_OK; - } -} - -/** - * @brief Initializes the NOR MSP. - */ -__weak void BSP_NOR_MspInit(void) -{ - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\ - GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* GPIOE configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\ - GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - /* GPIOF configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); - - /* GPIOG configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5; - HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); -} - -/** - * @brief NOR BSP Wait for Ready/Busy signal. - * @param hnor: Pointer to NOR handle - * @param Timeout: Timeout duration - */ -void HAL_NOR_MspWait(NOR_HandleTypeDef *hnor, uint32_t Timeout) -{ - uint32_t timeout = Timeout; - - /* Polling on Ready/Busy signal */ - while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_BUSY_STATE) && (timeout > 0)) - { - timeout--; - } - - timeout = Timeout; - - /* Polling on Ready/Busy signal */ - while((HAL_GPIO_ReadPin(NOR_READY_BUSY_GPIO, NOR_READY_BUSY_PIN) != NOR_READY_STATE) && (timeout > 0)) - { - timeout--; - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.h deleted file mode 100644 index 15e5181632..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_nor.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_nor.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_nor.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_NOR_H -#define __STM324x9I_EVAL_NOR_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_NOR - * @{ - */ - -/** @defgroup STM324x9I_EVAL_NOR_Exported_Constants STM324x9I EVAL NOR Exported Constants - * @{ - */ -#define NOR_STATUS_OK 0x00 -#define NOR_STATUS_ERROR 0x01 - -#define NOR_DEVICE_ADDR ((uint32_t)0x60000000) - -/* #define NOR_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_8 */ -#define NOR_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_16 - -#define NOR_BURSTACCESS FMC_BURST_ACCESS_MODE_DISABLE -/* #define NOR_BURSTACCESS FMC_BURST_ACCESS_MODE_ENABLE*/ - -#define NOR_WRITEBURST FMC_WRITE_BURST_DISABLE -/* #define NOR_WRITEBURST FMC_WRITE_BURST_ENABLE */ - -#define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ONLY -/* #define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ASYNC */ - -/* NOR operations Timeout definitions */ -#define BLOCKERASE_TIMEOUT ((uint32_t)0x00A00000) /* NOR block erase timeout */ -#define CHIPERASE_TIMEOUT ((uint32_t)0x30000000) /* NOR chip erase timeout */ -#define PROGRAM_TIMEOUT ((uint32_t)0x00004400) /* NOR program timeout */ - -/* NOR Ready/Busy signal GPIO definitions */ -#define NOR_READY_BUSY_PIN GPIO_PIN_6 -#define NOR_READY_BUSY_GPIO GPIOD -#define NOR_READY_STATE GPIO_PIN_SET -#define NOR_BUSY_STATE GPIO_PIN_RESET -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_NOR_Exported_Functions STM324x9I EVAL NOR Exported Functions - * @{ - */ -uint8_t BSP_NOR_Init(void); -uint8_t BSP_NOR_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_ProgramData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_NOR_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_NOR_Erase_Chip(void); -uint8_t BSP_NOR_Read_ID(NOR_IDTypeDef *pNOR_ID); -void BSP_NOR_ReturnToReadMode(void); -void BSP_NOR_MspInit(void); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_NOR_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.c deleted file mode 100644 index 3b3401bab2..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.c +++ /dev/null @@ -1,490 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM324x9I-EVAL - * evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM324x9I-EVAL - evaluation board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the evaluation board. The SD detection interrupt - is handled by calling the function BSP_SD_DetectIT() which is called in the IRQ - handler file, the user callback is implemented in the function BSP_SD_DetectCallback(). - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SD STM324x9I EVAL SD - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SD_Private_Variables SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SD_Private_Functions SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t SD_state = MSD_OK; - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Configure IO functionalities for SD detect pin */ - BSP_IO_Init(); - - /* Check if the SD card is plugged in the slot */ - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - SD_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(SD_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - SD_state = MSD_ERROR; - } - else - { - SD_state = MSD_OK; - } - } - - return SD_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns 0 - */ -uint8_t BSP_SD_ITConfig(void) -{ - /* Configure Interrupt mode for SD detection pin */ - BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_FALLING_EDGE); - - return 0; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if(BSP_IO_ReadPin(SD_DETECT_PIN)) - { - status = SD_NOT_PRESENT; - } - - return status; -} - -/** @brief SD detect IT treatment. - * @retval None - */ -void BSP_SD_DetectIT(void) -{ - /* Clear all pending bits */ - BSP_IO_ITClear(); - - /* To re-enable IT */ - BSP_SD_ITConfig(); - - /* SD detect IT callback */ - BSP_SD_DetectCallback(); -} - -/** @brief SD detect IT detection callback - * @retval None - */ -__weak void BSP_SD_DetectCallback(void) -{ - /* NOTE: This function Should not be modified, when the callback is needed, - the BSP_SD_DetectCallback could be implemented in the user file - */ -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dmaRxHandle; - static DMA_HandleTypeDef dmaTxHandle; - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &GPIO_Init_Structure); - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dmaRxHandle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dmaRxHandle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dmaRxHandle.Init.PeriphInc = DMA_PINC_DISABLE; - dmaRxHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaRxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaRxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaRxHandle.Init.Mode = DMA_PFCTRL; - dmaRxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dmaRxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dmaRxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaRxHandle.Init.MemBurst = DMA_MBURST_INC4; - dmaRxHandle.Init.PeriphBurst = DMA_PBURST_INC4; - - dmaRxHandle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dmaRxHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaRxHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaRxHandle); - - /* Configure DMA Tx parameters */ - dmaTxHandle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dmaTxHandle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dmaTxHandle.Init.PeriphInc = DMA_PINC_DISABLE; - dmaTxHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaTxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaTxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaTxHandle.Init.Mode = DMA_PFCTRL; - dmaTxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dmaTxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dmaTxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaTxHandle.Init.MemBurst = DMA_MBURST_INC4; - dmaTxHandle.Init.PeriphBurst = DMA_PBURST_INC4; - - dmaTxHandle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dmaTxHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaTxHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaTxHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - * @retval None - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - * @retval None - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.h deleted file mode 100644 index b655973133..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sd.h +++ /dev/null @@ -1,140 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_SD_H -#define __STM324x9I_EVAL_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "stm324x9i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_SD - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SD_Exported_Types STM324x9I EVAL SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SD_Exported_Constants STM324x9I EVAL SD Exported Constants - * @{ - */ -/** - * @brief SD status structure definition - */ -#define MSD_OK 0x00 -#define MSD_ERROR 0x01 - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - - -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8) -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SD_Exported_Functions STM324x9I EVAL SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -void BSP_SD_DetectIT(void); -void BSP_SD_DetectCallback(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_SD_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.c deleted file mode 100644 index 41cd110104..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.c +++ /dev/null @@ -1,407 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sdram.c - * @author MCD Application Team - * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory - * device mounted on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted - on STM324x9I-EVAL evaluation board. - - This driver does not need a specific component driver for the SDRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SDRAM memory. - o It contains the SDRAM initialization sequence to program the SDRAM external - device using the function BSP_SDRAM_Initialization_sequence(). Note that this - sequence is standard for all SDRAM devices, but can include some differences - from a device to another. If it is the case, the right sequence should be - implemented separately. - - + SDRAM read/write operations - o SDRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions - BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA(). - o The AHB access is performed with 32-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) word transfer (see the - BSP_SDRAM_MspInit() static function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - o You can send a command to the SDRAM device in runtime using the function - BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between - the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_sdram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SDRAM STM324x9I EVAL SDRAM - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SDRAM_Private_Variables STM324x9I EVAL SDRAM Private Variables - * @{ - */ -static SDRAM_HandleTypeDef sdramHandle; -static FMC_SDRAM_TimingTypeDef Timing; -static FMC_SDRAM_CommandTypeDef Command; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SDRAM_Private_Functions STM324x9I EVAL SDRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the SDRAM device. - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_Init(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - /* SDRAM device configuration */ - sdramHandle.Instance = FMC_SDRAM_DEVICE; - - /* Timing configuration for 90Mhz as SD clock frequency (System clock is up to 180Mhz */ - Timing.LoadToActiveDelay = 2; - Timing.ExitSelfRefreshDelay = 7; - Timing.SelfRefreshTime = 4; - Timing.RowCycleDelay = 7; - Timing.WriteRecoveryTime = 2; - Timing.RPDelay = 2; - Timing.RCDDelay = 2; - - sdramHandle.Init.SDBank = FMC_SDRAM_BANK1; - sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9; - sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; - sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; - sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; - sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; - sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; - sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; - sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; - - /* SDRAM controller initialization */ - BSP_SDRAM_MspInit(); - if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM initialization sequence */ - BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); - - return sdramstatus; -} - -/** - * @brief Programs the SDRAM device. - * @param RefreshCount: SDRAM refresh counter value - */ -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) -{ - __IO uint32_t tmpmrd = 0; - - /* Step 1: Configure a clock configuration enable command */ - Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 2: Insert 100 us minimum delay */ - /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ - HAL_Delay(1); - - /* Step 3: Configure a PALL (precharge all) command */ - Command.CommandMode = FMC_SDRAM_CMD_PALL; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 4: Configure an Auto Refresh command */ - Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 8; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 5: Program the external memory mode register */ - tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\ - SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\ - SDRAM_MODEREG_CAS_LATENCY_3 |\ - SDRAM_MODEREG_OPERATING_MODE_STANDARD |\ - SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; - - Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = tmpmrd; - - /* Send the command */ - HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 6: Set the refresh rate counter */ - /* Set the device refresh rate */ - HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); -} - -/** - * @brief Reads an mount of data from the SDRAM memory in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Reads an mount of data from the SDRAM memory in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SDRAM status - */ -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Sends command to the SDRAM bank. - * @param SdramCmd: Pointer to SDRAM command structure - * @retval HAL status - */ -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) -{ - if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Handles SDRAM DMA transfer interrupt request. - */ -void BSP_SDRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sdramHandle.hdma); -} - -/** - * @brief Initializes SDRAM MSP. - */ -__weak void BSP_SDRAM_MspInit(void) -{ - static DMA_HandleTypeDef dmaHandle; - GPIO_InitTypeDef GPIO_Init_Structure; - SDRAM_HandleTypeDef *hsdram = &sdramHandle; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - __HAL_RCC_GPIOH_CLK_ENABLE(); - __HAL_RCC_GPIOI_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_FAST; - GPIO_Init_Structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8| GPIO_PIN_9 | GPIO_PIN_10 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* GPIOE configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - /* GPIOF configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - - HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); - - /* GPIOG configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); - - /* GPIOH configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOH, &GPIO_Init_Structure); - - /* GPIOI configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_9 | GPIO_PIN_10; - HAL_GPIO_Init(GPIOI, &GPIO_Init_Structure); - - /* Configure common DMA parameters */ - dmaHandle.Init.Channel = SDRAM_DMAx_CHANNEL; - dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; - dmaHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaHandle.Init.Mode = DMA_NORMAL; - dmaHandle.Init.Priority = DMA_PRIORITY_HIGH; - dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaHandle.Init.MemBurst = DMA_MBURST_SINGLE; - dmaHandle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dmaHandle.Instance = SDRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsdram, hdma, dmaHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.h deleted file mode 100644 index a8f5898492..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sdram.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sdram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_sdram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_SDRAM_H -#define __STM324x9I_EVAL_SDRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_SDRAM - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SDRAM_Exported_Constants STM324x9I EVAL SDRAM Exported Constants - * @{ - */ -#define SDRAM_OK 0x00 -#define SDRAM_ERROR 0x01 - -#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000) -#define SDRAM_DEVICE_SIZE ((uint32_t)0x2000000) /* SDRAM device size in Bytes */ - -/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_8 */ -/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_16 */ -#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_32 - -#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2 -/* #define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_3 */ - -#define REFRESH_COUNT ((uint32_t)0x0569) /* SDRAM refresh counter (90Mhz SD clock) */ - -#define SDRAM_TIMEOUT ((uint32_t)0xFFFF) - -/* DMA definitions for SDRAM DMA transfer */ -#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SDRAM_DMAx_STREAM DMA2_Stream0 -#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler - -/** - * @brief FMC SDRAM Mode definition register defines - */ -#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) -#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) -#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) -#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) -#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) -#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) -#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SDRAM_Exported_Functions STM324x9I EVAL SDRAM Exported Functions - * @{ - */ -uint8_t BSP_SDRAM_Init(void); -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount); -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd); -void BSP_SDRAM_DMA_IRQHandler(void); -void BSP_SDRAM_MspInit(void); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_SDRAM_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.c deleted file mode 100644 index bccd3de5c6..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.c +++ /dev/null @@ -1,303 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sram.c - * @author MCD Application Team - * @brief This file includes the SRAM driver for the IS61WV102416BLL-10M memory - * device mounted on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IS61WV102416BLL-10M SRAM external memory mounted - on STM324x9I-EVAL evaluation board. - - This driver does not need a specific component driver for the SRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SRAM external memory using the BSP_SRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SRAM memory. - - + SRAM read/write operations - o SRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SRAM_ReadData()/BSP_SRAM_WriteData(), or by DMA transfer using the functions - BSP_SRAM_ReadData_DMA()/BSP_SRAM_WriteData_DMA(). - o The AHB access is performed with 16-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) halfword transfer - (see the BSP_SRAM_MspInit() static function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_sram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SRAM STM324x9I EVAL SRAM - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SRAM_Private_Variables STM324x9I EVAL SRAM Private Variables - * @{ - */ -static SRAM_HandleTypeDef sramHandle; -static FMC_NORSRAM_TimingTypeDef Timing; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SRAM_Private_Functions STM324x9I EVAL SRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the SRAM device. - * @retval SRAM status - */ -uint8_t BSP_SRAM_Init(void) -{ - sramHandle.Instance = FMC_NORSRAM_DEVICE; - sramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - /* SRAM device configuration */ - Timing.AddressSetupTime = 2; - Timing.AddressHoldTime = 1; - Timing.DataSetupTime = 2; - Timing.BusTurnAroundDuration = 1; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FMC_ACCESS_MODE_A; - - sramHandle.Init.NSBank = FMC_NORSRAM_BANK2; - sramHandle.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; - sramHandle.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; - sramHandle.Init.MemoryDataWidth = SRAM_MEMORY_WIDTH; - sramHandle.Init.BurstAccessMode = SRAM_BURSTACCESS; - sramHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; - sramHandle.Init.WrapMode = FMC_WRAP_MODE_DISABLE; - sramHandle.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; - sramHandle.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; - sramHandle.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; - sramHandle.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; - sramHandle.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; - sramHandle.Init.WriteBurst = SRAM_WRITEBURST; - sramHandle.Init.ContinuousClock = CONTINUOUSCLOCK_FEATURE; - - /* SRAM controller initialization */ - BSP_SRAM_MspInit(); - if(HAL_SRAM_Init(&sramHandle, &Timing, &Timing) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the SRAM device in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Handles SRAM DMA transfer interrupt request. - */ -void BSP_SRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sramHandle.hdma); -} - -/** - * @brief Initializes SRAM MSP. - */ -__weak void BSP_SRAM_MspInit(void) -{ - static DMA_HandleTypeDef dmaHandle; - GPIO_InitTypeDef GPIO_Init_Structure; - SRAM_HandleTypeDef *hsram = &sramHandle; - - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __SRAM_DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_FMC; - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ - GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* GPIOE configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - /* GPIOF configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); - - /* GPIOG configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_9; - HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); - - /* Configure common DMA parameters */ - dmaHandle.Init.Channel = SRAM_DMAx_CHANNEL; - dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; - dmaHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - dmaHandle.Init.Mode = DMA_NORMAL; - dmaHandle.Init.Priority = DMA_PRIORITY_HIGH; - dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaHandle.Init.MemBurst = DMA_MBURST_SINGLE; - dmaHandle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dmaHandle.Instance = SRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsram, hdma, dmaHandle); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&dmaHandle); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&dmaHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SRAM_DMAx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SRAM_DMAx_IRQn); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.h deleted file mode 100644 index 7e35965c8c..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_sram.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_sram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_sram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_SRAM_H -#define __STM324x9I_EVAL_SRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SRAM STM324x9I EVAL SRAM - * @{ - */ - -/** @defgroup STM324x9I_EVAL_SRAM_Exported_Constants STM324x9I EVAL SRAM Exported Constants - * @{ - */ - -/** - * @brief SRAM status structure definition - */ -#define SRAM_OK 0x00 -#define SRAM_ERROR 0x01 - -#define SRAM_DEVICE_ADDR ((uint32_t)0x64000000) -#define SRAM_DEVICE_SIZE ((uint32_t)0x200000) /* SRAM device size in Bytes */ - -/* #define SRAM_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_8 */ -#define SRAM_MEMORY_WIDTH FMC_NORSRAM_MEM_BUS_WIDTH_16 - -#define SRAM_BURSTACCESS FMC_BURST_ACCESS_MODE_DISABLE -/* #define SRAM_BURSTACCESS FMC_BURST_ACCESS_MODE_ENABLE*/ - -#define SRAM_WRITEBURST FMC_WRITE_BURST_DISABLE -/* #define SRAM_WRITEBURST FMC_WRITE_BURST_ENABLE */ - -#define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ONLY -/* #define CONTINUOUSCLOCK_FEATURE FMC_CONTINUOUS_CLOCK_SYNC_ASYNC */ - -/* DMA definitions for SRAM DMA transfer */ -#define __SRAM_DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SRAM_DMAx_STREAM DMA2_Stream0 -#define SRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_SRAM_Exported_Functions STM324x9I EVAL SRAM Exported Functions - * @{ - */ -uint8_t BSP_SRAM_Init(void); -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -void BSP_SRAM_DMA_IRQHandler(void); -void BSP_SRAM_MspInit(void); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_SRAM_H */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.c b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.c deleted file mode 100644 index dcbcc424a7..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.c +++ /dev/null @@ -1,253 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM324x9I-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM324x9I-EVAL - evaluation board on the AMPIRE 640x480 LCD mounted on MB1063 or AMPIRE - 480x272 LCD mounted on MB1046 daughter board. - - If the AMPIRE 640x480 LCD is used, the TS3510 or EXC7200 component driver - must be included according to the touch screen driver present on this board. - - If the AMPIRE 480x272 LCD is used, the STMPE811 IO expander device component - driver must be included in order to run the TS module commanded by the IO - expander device, the STMPE1600 IO expander device component driver must be - also included in case of interrupt mode use of the TS. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - The interrupt mode internally uses the IO functionalities driver driven by - the IO expander, to configure the IT line. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. - o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get - the interrupt status. To clear the IT pending bits, you should call the - function BSP_TS_ITClear(). - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval_ts.h" -#include "stm324x9i_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @defgroup STM324x9I_EVAL_TS STM324x9I EVAL TS - * @{ - */ - -/** @defgroup STM324x9I_EVAL_TS_Private_Variables STM324x9I EVAL TS Private Variables - * @{ - */ -static TS_DrvTypeDef *ts_driver; -static uint16_t ts_x_boundary, ts_y_boundary; -static uint8_t ts_orientation; -static uint8_t I2C_Address; -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_TS_Private_Functions STM324x9I EVAL TS Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, clocks..). - * @param xSize: Maximum X size of the TS area on LCD - * @param ySize: Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize) -{ - uint8_t status = TS_OK; - ts_x_boundary = xSize; - ts_y_boundary = ySize; - - /* Read ID and verify if the IO expander is ready */ - if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) - { - /* Initialize the TS driver structure */ - ts_driver = &stmpe811_ts_drv; - I2C_Address = TS_I2C_ADDRESS; - ts_orientation = TS_SWAP_Y; - } - else - { - IOE_Init(); - - /* Check TS3510 touch screen driver presence to determine if TS3510 or - * EXC7200 driver will be used */ - if(BSP_TS3510_IsDetected() == 0) - { - /* Initialize the TS driver structure */ - ts_driver = &ts3510_ts_drv; - I2C_Address = TS3510_I2C_ADDRESS; - } - else - { - /* Initialize the TS driver structure */ - ts_driver = &exc7200_ts_drv; - I2C_Address = EXC7200_I2C_ADDRESS; - } - ts_orientation = TS_SWAP_NONE; - } - - /* Initialize the TS driver */ - ts_driver->Init(I2C_Address); - ts_driver->Start(I2C_Address); - - return status; -} - -/** - * @brief DeInitializes the TouchScreen. - * @retval TS state - */ -uint8_t BSP_TS_DeInit(void) -{ - /* Actually ts_driver does not provide a DeInit function */ - return TS_OK; -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - /* Initialize the IO */ - BSP_IO_Init(); - - /* Configure TS IT line IO */ - BSP_IO_ConfigPin(TS_INT_PIN, IO_MODE_IT_FALLING_EDGE); - - /* Enable the TS ITs */ - ts_driver->EnableIT(I2C_Address); - - return TS_OK; -} - -/** - * @brief Gets the touch screen interrupt status. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITGetStatus(void) -{ - /* Return the TS IT status */ - return (ts_driver->GetITStatus(I2C_Address)); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x = 0, _y = 0; - uint16_t xDiff, yDiff , x , y; - uint16_t swap; - - TS_State->TouchDetected = ts_driver->DetectTouch(I2C_Address); - - if(TS_State->TouchDetected) - { - ts_driver->GetXY(I2C_Address, &x, &y); - - if(ts_orientation & TS_SWAP_X) - { - x = 4096 - x; - } - - if(ts_orientation & TS_SWAP_Y) - { - y = 4096 - y; - } - - if(ts_orientation & TS_SWAP_XY) - { - swap = y; - y = x; - x = swap; - } - - xDiff = x > _x? (x - _x): (_x - x); - yDiff = y > _y? (y - _y): (_y - y); - - if (xDiff + yDiff > 5) - { - _x = x; - _y = y; - } - - TS_State->x = (ts_x_boundary * _x) >> 12; - TS_State->y = (ts_y_boundary * _y) >> 12; - } - return TS_OK; -} - -/** - * @brief Clears all touch screen interrupts. - */ -void BSP_TS_ITClear(void) -{ - /* Clear all IO IT pin */ - BSP_IO_ITClear(); - - /* Clear TS IT pending bits */ - ts_driver->ClearIT(I2C_Address); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.h b/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.h deleted file mode 100644 index 0e0d777fe7..0000000000 --- a/Drivers/BSP/STM324x9I_EVAL/stm324x9i_eval_ts.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - ****************************************************************************** - * @file stm324x9i_eval_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324x9i_eval_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324x9I_EVAL_TS_H -#define __STM324x9I_EVAL_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324x9i_eval.h" -/* Include IOExpander(STMPE811) component Driver */ -#include "../Components/stmpe811/stmpe811.h" -/* Include TouchScreen component drivers */ -#include "../Components/ts3510/ts3510.h" -#include "../Components/exc7200/exc7200.h" -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324x9I_EVAL - * @{ - */ - -/** @addtogroup STM324x9I_EVAL_TS - * @{ - */ - -/** @defgroup STM324x9I_EVAL_TS_Exported_Types STM324x9I EVAL TS Exported Types - * @{ - */ -typedef struct -{ - uint16_t TouchDetected; - uint16_t x; - uint16_t y; - uint16_t z; -}TS_StateTypeDef; - -typedef enum -{ - TS_OK = 0x00, - TS_ERROR = 0x01, - TS_TIMEOUT = 0x02 -}TS_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_TS_Exported_Constants STM324x9I EVAL TS Exported Constants - * @{ - */ -#define TS_SWAP_NONE 0x00 -#define TS_SWAP_X 0x01 -#define TS_SWAP_Y 0x02 -#define TS_SWAP_XY 0x04 - -/* Interrupt sources pins definition */ -#define TS_INT_PIN 0x0010 -/** - * @} - */ - -/** @defgroup STM324x9I_EVAL_TS_Exported_Functions STM324x9I EVAL TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize); -uint8_t BSP_TS_DeInit(void); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ITConfig(void); -uint8_t BSP_TS_ITGetStatus(void); -void BSP_TS_ITClear(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324x9I_EVAL_TS_H */ diff --git a/Drivers/BSP/STM324xG_EVAL b/Drivers/BSP/STM324xG_EVAL new file mode 160000 index 0000000000..12af24189f --- /dev/null +++ b/Drivers/BSP/STM324xG_EVAL @@ -0,0 +1 @@ +Subproject commit 12af24189f7dc85fd0338a797cb3c4b6c18d44b0 diff --git a/Drivers/BSP/STM324xG_EVAL/LICENSE.md b/Drivers/BSP/STM324xG_EVAL/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM324xG_EVAL/README.md b/Drivers/BSP/STM324xG_EVAL/README.md deleted file mode 100644 index d32aabe280..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# BSP STM324XG-EVAL Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm324xg-eval.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm324xg-eval** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM324XG-EVAL** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm324xg-eval/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22) -* [stm32-ili9325](https://github.com/STMicroelectronics/stm32-ili9325) -* [stm32-ov2640](https://github.com/STMicroelectronics/stm32-ov2640) -* [stm32-stmpe811](https://github.com/STMicroelectronics/stm32-stmpe811) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM324xG_EVAL/Release_Notes.html b/Drivers/BSP/STM324xG_EVAL/Release_Notes.html deleted file mode 100644 index 12b0dacee3..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/Release_Notes.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - Release Notes for STM324xG_EVAL Evaluation Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM324xG_EVAL Evaluation Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM324xG_EVAL Evaluation Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Fix compilation errors with SW4STM32 toolchain
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add general description of BSP drivers
  • -
  • Remove date & version
  • -
  • stm324xg_eval_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval_sd.c/.h: -
      -
    • Update BSP SD APIs following new HAL SD drivers implementation
    • -
    • Fix BlockSize to 512 bytes
    • -
  • -
  • stm324xg_eval_audio.c/.h: -
      -
    • Add BSP_AUDIO_OUT_MspInit, BSP_AUDIO_OUT_MspDeInit and BSP_AUDIO_OUT_ClockConfig APIs as weak
    • -
    • Remove CODEC_Reset API
    • -
  • -
  • stm324xg_eval_sram.c/.h: -
      -
    • Add BSP_SRAM_MspInit API as weak
    • -
  • -
  • stm324xg_eval_camera.c/.h: -
      -
    • Add BSP_CAMERA_MspInit API as weak
    • -
  • -
-

Notes:

-
    -
  • These BSP drivers break the compatibility with previous versions.
  • -
  • If FatFs is required, “FatFS R0.11 ST modified 20161223†must be used with this version of BSP drivers.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval_camera.h update BSP Camera driver to use the new HAL DCMI API’s: -
      -
    • Update BSP_CAMERA_Suspend() API to call HAL_DCMI_Suspend() API
    • -
    • Update BSP_CAMERA_Resume to call HAL_DCMI_Resume() API
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM324xG_EVAL_BSP_User_Manual.chm file
  • -
  • stm324xg_eval.c -
      -
    • Update to initialize the SRAM PageSize parameter to avoid issue with GCC compiler
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval.c/.h -
      -
    • Update to support the new LCD component (ili9325) version V1.2.2 -
        -
      • Add new API: LCD_IO_WriteMultipleData()
      • -
      • Update LCD_IO_ReadData() API prototype: add “RegValue†parameter
      • -
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval.c -
      -
    • Add AUDIO_IO_DeInit function to align with latest audio codecs V2.0.2
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE() macros implementation.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval.c/.h -
      -
    • Change I2C_SPEED used define by BSP_I2C_SPEED
    • -
  • -
  • stm324xg_eval_eeprom.c/.h -
      -
    • Change BSP_EEPROM_WaitEepromStandbyState() and BSP_EEPROM_WritePage() to be declared as static APIs
    • -
  • -
  • stm324xg_eval_camera.h, stm324xg_eval_audio.h, stm324xg_eval_io.h, stm324xg_eval_ts.h and stm324xg_eval_lcd.c/.h -
      -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval_audio.c/.h -
      -
    • BSP_AUDIO_OUT_Play(): uses the buffer size in byte instead of half-word
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval.c/.h -
      -
    • Add protection for double initialization of IO_Init within LCD_IO_Init()
    • -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
  • -
  • stm324xg_eval_audio.c/.h -
      -
    • Add note that only the audio stereo format is supported
    • -
  • -
  • stm324xg_eval_sd.c/.h -
      -
    • Ensure compatibility with the updated version of FatFs sd_diskio driver (i.e. FatFs R0.10 ST modified 20140422) supporting SDIO/SPI to interface uSD
    • -
    • Comments clean up and typo corrections
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval_sd.c/.h -
      -
    • Update SD_DATATIMEOUT value
    • -
  • -
  • stm324xg_eval_eeprom.c/.h -
      -
    • Update usage of BSP_EEPROM_TIMEOUT_UserCallback() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V1.1.1, and thus the 2 versions are not compatible.
  • -
  • This version has to be used only with STM32CubeF4 based development
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm324xg_eval_ioe.c -
      -
    • Update the MEMS pins configuration in IOE_Config() function.
    • -
    • Update I2C communication sequence in I2C_ReadDataBuffer() function to ensure efficient and robust I2C transfer.
    • -
  • -
  • stm324xg_eval_lcd.c -
      -
    • Replace STM324xG_LCD_Init() function by LCD_Init() function and add a legacy for old LCD Initialization function name for compatibility purpose.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm3224xg_eval_sdio_sd.h/.c -
      -
    • Support SDHC memory cards with capacity greater than 4 GB
    • -
    • Transmit and receive functions: swap the order of state machine and DMA configuration, to fix marginal limitation where the card sent data to the SDIO interface while the DMA is not ready to transfer them
    • -
    • Support SDHS (High Speed) memory cards, add new function SD_HighSpeed()
    • -
  • -
  • stm324xg_eval_ioe.c -
      -
    • Configuration clean up and corrections
    • -
    • Touch screen (TSC) Interrupt mode enhancement
    • -
    • Update Read/Write low layer functions to ensure efficient and robust I2C transfer -
        -
      • Update legacy functions I2C_WriteDeviceRegister(), I2C_ReadDeviceRegister() and I2C_ReadDataBuffer() to use polling mode instead of DMA
      • -
      • Add three new functions I2C_DMA_WriteDeviceRegister(), I2C_DMA_ReadDeviceRegister() and I2C_DMA_ReadDataBuffer(), for DMA based I2C transfer
      • -
    • -
  • -
  • stm324xg_eval.c -
      -
    • SD_LowLevel_Init(): Set the GPIO clock to 50MHz to support High Speed mode
    • -
  • -
  • stm324xg_eval_i2c_ee.c -
      -
    • Enable I2C DMA request only after the enable of the DMA stream, to avoid DMA FIFO error generation
    • -
  • -
  • stm324xg_eval_fsmc_sram.c -
      -
    • Change memory type to SRAM instead of PSRAM (PSRAM is available only on STM324xG-EVAL RevA) and update timing values
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • -
  • stm324xg_eval_lcd.c -
      -
    • Enhance Gamma Curve settings for ILI9320 controller
    • -
  • -
  • stm324xg_eval.c and stm324xg_eval_ioe.c -
      -
    • Swap the order of I2C IOs and alternate function (AF) configuration: AF configuration should be done before to configure the IOs.
    • -
  • -
  • stm324xg_eval_sdio_sd.c -
      -
    • In SD_WaitWriteOperation() and SD_WaitReadOperation() functions: reset StopCondition flag after sending CMD12
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
  • stm324xg_eval_lcd.c -
      -
    • Remove “static†from TextColor and BackColor variables declaration (need to be changed from other application modules)
    • -
  • -
  • stm324xg_eval_ioe.h -
      -
    • Add conditional compilation on the default DMA stream(s) used for I2C1 Tx and Rx transfers, to allow user to change them from application level.
    • -
  • -
  • stm322xg_eval_sdio_sd.h -
      -
    • SD_CardInfo structure, define CardCapacity variable as 64-bit long (instead of 32-bit) to support SDHC memory cards with capacity greater than 4 GB.
    • -
  • -
  • stm324xg_eval_fsmc_sram.c -
      -
    • Add IOs config of missing FSMC address lines (FSMC_A21, FSMC_A22 and FSMC_A23).
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release for STM3240_41_G_EVAL board RevB drivers
  • -
  • stm322xg_eval_lcd.c: increase FSMC AddressSetupTime value from 4 to 5 to be compliant with some LCD access timing
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM324xG_EVAL/_htmresc/favicon.png b/Drivers/BSP/STM324xG_EVAL/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM324xG_EVAL/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM324xG_EVAL/_htmresc/mini-st_2020.css b/Drivers/BSP/STM324xG_EVAL/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM324xG_EVAL/_htmresc/st_logo_2020.png b/Drivers/BSP/STM324xG_EVAL/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM324xG_EVAL/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.c deleted file mode 100644 index 7d35d4efed..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.c +++ /dev/null @@ -1,1063 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM324xG-EVAL evaluation - * board(MB786) RevB from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTE - - This driver requires the stm324xG_eval_io.c driver to manage the joystick - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" -#include "stm324xg_eval_io.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM324xG_EVAL STM324xG EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL STM324xG EVAL LOW LEVEL - * @{ - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL_Private_TypesDefinitions STM324xG EVAL LOW LEVEL Private TypesDefinitions - * @{ - */ -typedef struct -{ - __IO uint16_t REG; - __IO uint16_t RAM; -}LCD_CONTROLLER_TypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL_Private_Defines STM324xG EVAL LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM324xG EVAL BSP Driver version number V3.0.4 - */ -#define __STM324xG_EVAL_BSP_VERSION_MAIN (0x03) /*!< [31:24] main version */ -#define __STM324xG_EVAL_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM324xG_EVAL_BSP_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */ -#define __STM324xG_EVAL_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM324xG_EVAL_BSP_VERSION ((__STM324xG_EVAL_BSP_VERSION_MAIN << 24)\ - |(__STM324xG_EVAL_BSP_VERSION_SUB1 << 16)\ - |(__STM324xG_EVAL_BSP_VERSION_SUB2 << 8 )\ - |(__STM324xG_EVAL_BSP_VERSION_RC)) - -#define FMC_BANK3_BASE ((uint32_t)(0x60000000 | 0x08000000)) -#define FMC_BANK3 ((LCD_CONTROLLER_TypeDef *) FMC_BANK3_BASE) - -#define I2C_TIMEOUT 100 /*Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief Configures joystick GPIO and EXTI modes. - * @param Joy_Mode: Button mode. - * This parameter can be one of the following values: - * @arg JOY_MODE_GPIO: Joystick pins will be used as simple IOs - * @arg JOY_MODE_EXTI: Joystick pins will be connected to EXTI line - * with interrupt generation capability - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode) -{ - uint8_t ret = 0; - - /* Initialize the IO functionalities */ - ret = BSP_IO_Init(); - - /* Configure joystick pins in IT mode */ - if(Joy_Mode == JOY_MODE_EXTI) - { - /* Configure joystick pins in IT mode */ - BSP_IO_ConfigPin(JOY_ALL_PINS, IO_MODE_IT_FALLING_EDGE); - } - - return ret; -} - -/** - * @brief Returns the current joystick status. - * @retval Code of the joystick key pressed - * This code can be one of the following values: - * @arg JOY_NONE - * @arg JOY_SEL - * @arg JOY_DOWN - * @arg JOY_LEFT - * @arg JOY_RIGHT - * @arg JOY_UP - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - uint8_t tmp = 0; - - /* Read the status joystick pins */ - tmp = (uint8_t)BSP_IO_ReadPin(JOY_ALL_PINS); - - /* Check the pressed keys */ - if((tmp & JOY_NONE_PIN) == JOY_NONE) - { - return(JOYState_TypeDef) JOY_NONE; - } - else if(!(tmp & JOY_SEL_PIN)) - { - return(JOYState_TypeDef) JOY_SEL; - } - else if(!(tmp & JOY_DOWN_PIN)) - { - return(JOYState_TypeDef) JOY_DOWN; - } - else if(!(tmp & JOY_LEFT_PIN)) - { - return(JOYState_TypeDef) JOY_LEFT; - } - else if(!(tmp & JOY_RIGHT_PIN)) - { - return(JOYState_TypeDef) JOY_RIGHT; - } - else if(!(tmp & JOY_UP_PIN)) - { - return(JOYState_TypeDef) JOY_UP; - } - else - { - return(JOYState_TypeDef) JOY_NONE; - } -} - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/**************************** I2C Routines ************************************/ - -/** - * @brief Initializes I2C MSP. - */ -static void I2Cx_MspInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - GPIO_InitStruct.Pin = EVAL_I2Cx_SCL_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = EVAL_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &GPIO_InitStruct); - - /* Configure I2C Rx as alternate function */ - GPIO_InitStruct.Pin = EVAL_I2Cx_SDA_PIN; - HAL_GPIO_Init(EVAL_I2Cx_SCL_SDA_GPIO_PORT, &GPIO_InitStruct); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - EVAL_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - EVAL_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - EVAL_I2Cx_RELEASE_RESET(); - - /* Set priority and enable I2Cx event Interrupt */ - HAL_NVIC_SetPriority(EVAL_I2Cx_EV_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_EV_IRQn); - - /* Set priority and enable I2Cx error Interrupt */ - HAL_NVIC_SetPriority(EVAL_I2Cx_ER_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(EVAL_I2Cx_ER_IRQn); -} - -/** - * @brief Initializes I2C HAL. - */ -static void I2Cx_Init(void) -{ - if(HAL_I2C_GetState(&heval_I2c) == HAL_I2C_STATE_RESET) - { - heval_I2c.Instance = EVAL_I2Cx; - heval_I2c.Init.ClockSpeed = BSP_I2C_SPEED; - heval_I2c.Init.DutyCycle = I2C_DUTYCYCLE_2; - heval_I2c.Init.OwnAddress1 = 0; - heval_I2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - heval_I2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; - heval_I2c.Init.OwnAddress2 = 0; - heval_I2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; - heval_I2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; - - /* Init the I2C */ - I2Cx_MspInit(); - HAL_I2C_Init(&heval_I2c); - } -} - -/** - * @brief Configures I2C Interrupt. - */ -static void I2Cx_ITConfig(void) -{ - static uint8_t I2C_IT_Enabled = 0; - GPIO_InitTypeDef GPIO_InitStruct; - - if(I2C_IT_Enabled == 0) - { - I2C_IT_Enabled = 1; - - /* Enable the GPIO EXTI clock */ - __GPIOI_CLK_ENABLE(); - __SYSCFG_CLK_ENABLE(); - - GPIO_InitStruct.Pin = GPIO_PIN_2; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); - - /* Set priority and Enable GPIO EXTI Interrupt */ - HAL_NVIC_SetPriority((IRQn_Type)(EXTI2_IRQn), 0x0F, 0); - HAL_NVIC_EnableIRQ((IRQn_Type)(EXTI2_IRQn)); - } -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t Value = 0; - - status = HAL_I2C_Mem_Read(&heval_I2c, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2C_TIMEOUT); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Execute user timeout callback */ - I2Cx_Error(Addr); - } - - return Value; -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2C_TIMEOUT); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(Addr); - } -} - -/** - * @brief Reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress Internal memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, I2C_TIMEOUT); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* I2C error occurred */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Write a value in a register of the device through BUS in using DMA mode - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress Internal memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, I2C_TIMEOUT); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initiaize the I2C Bus */ - I2Cx_Error(Addr); - } - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(&heval_I2c, DevAddress, Trials, I2C_TIMEOUT)); -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param Addr: I2C Address - */ -static void I2Cx_Error(uint8_t Addr) -{ - /* De-initialize the IOE communication BUS */ - HAL_I2C_DeInit(&heval_I2c); - - /* Re-Initiaize the IOE communication BUS */ - I2Cx_Init(); -} - -/*************************** FSMC Routines ************************************/ -/** - * @brief Initializes FSMC_BANK3 MSP. - */ -static void FSMC_BANK3_MspInit(void) -{ - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Enable FSMC clock */ - __FSMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __GPIOD_CLK_ENABLE(); - __GPIOE_CLK_ENABLE(); - __GPIOF_CLK_ENABLE(); - __GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_FSMC; - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* GPIOE configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - /* GPIOF configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); - - /* GPIOG configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_10; - - HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); -} - -/** - * @brief Initializes LCD IO. - */ -static void FSMC_BANK3_Init(void) -{ - SRAM_HandleTypeDef hsram; - FSMC_NORSRAM_TimingTypeDef SRAM_Timing; - - /*** Configure the SRAM Bank 3 ***/ - /* Configure IPs */ - hsram.Instance = FMC_NORSRAM_DEVICE; - hsram.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - SRAM_Timing.AddressSetupTime = 5; - SRAM_Timing.AddressHoldTime = 1; - SRAM_Timing.DataSetupTime = 9; - SRAM_Timing.BusTurnAroundDuration = 0; - SRAM_Timing.CLKDivision = 2; - SRAM_Timing.DataLatency = 2; - SRAM_Timing.AccessMode = FSMC_ACCESS_MODE_A; - - hsram.Init.NSBank = FSMC_NORSRAM_BANK3; - hsram.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - hsram.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - hsram.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; - hsram.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; - hsram.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - hsram.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - hsram.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - hsram.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - hsram.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - hsram.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; - hsram.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - hsram.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; - hsram.Init.PageSize = FSMC_PAGE_SIZE_NONE; - - /* Initialize the SRAM controller */ - FSMC_BANK3_MspInit(); - HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing); -} - -/** - * @brief Writes register value. - * @param Data: Data to be written - */ -static void FSMC_BANK3_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FMC_BANK3->RAM = Data; -} - -/** - * @brief Writes register address. - * @param Reg: Register to be written - */ -static void FSMC_BANK3_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then write register */ - FMC_BANK3->REG = Reg; -} - -/** - * @brief Reads register value. - * @retval Read value - */ -static uint16_t FSMC_BANK3_ReadData(void) -{ - return FMC_BANK3->RAM; -} - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/***************************** LINK IOE ***************************************/ - -/** - * @brief Initializes IOE low level. - */ -void IOE_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Configures IOE low level Interrupt. - */ -void IOE_ITConfig(void) -{ - I2Cx_ITConfig(); -} - -/** - * @brief IOE writes single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief IOE reads single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Read data - */ -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief IOE reads multiple data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return I2Cx_ReadMultiple(Addr, Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief IOE delay. - * @param Delay: Delay in ms - */ -void IOE_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK LCD ***********************************/ - -/** - * @brief Initializes LCD low level. - */ -void LCD_IO_Init(void) -{ - if(Is_LCD_IO_Initialized == 0) - { - Is_LCD_IO_Initialized = 1; - FSMC_BANK3_Init(); - } -} - -/** - * @brief Writes data on LCD data register. - * @param Data: Data to be written - */ -void LCD_IO_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FSMC_BANK3_WriteData(Data); -} - -/** - * @brief Write register value. - * @param pData Pointer on the register value - * @param Size Size of byte to transmit to the register - */ -void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size) -{ - uint32_t counter; - uint16_t *ptr = (uint16_t *) pData; - - for (counter = 0; counter < Size; counter+=2) - { - /* Write 16-bit Reg */ - FSMC_BANK3_WriteData(*ptr); - ptr++; - } -} - -/** - * @brief Writes register on LCD register. - * @param Reg: Register to be written - */ -void LCD_IO_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then Write Reg */ - FSMC_BANK3_WriteReg(Reg); -} - -/** - * @brief Reads data from LCD data register. - * @param Reg: Register to be read - * @retval Read data. - */ -uint16_t LCD_IO_ReadData(uint16_t Reg) -{ - FSMC_BANK3_WriteReg(Reg); - - /* Read 16-bit Reg */ - return FSMC_BANK3_ReadData(); -} - -/********************************* LINK AUDIO *********************************/ -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief DeInitializes Audio low level. - * @note This function is intentionally kept empty, user should define it. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/***************************** LINK CAMERA ************************************/ - -/** - * @brief Initializes Camera low level. - */ -void CAMERA_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Camera writes single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_Write(Addr, Reg, Value); -} - -/** - * @brief Camera reads single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Read data - */ -uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_Read(Addr, Reg); -} - -/** - * @brief Camera delay. - * @param Delay: Delay in ms - */ -void CAMERA_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Write data to I2C EEPROM driver in using DMA channel - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Reads data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadMultiple(DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(DevAddress, Trials)); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.h deleted file mode 100644 index 6485f40878..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval.h +++ /dev/null @@ -1,326 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval.h - * @author MCD Application Team - * @brief This file contains definitions for STM324xG_EVAL's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_H -#define __STM324xG_EVAL_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_LOW_LEVEL - * @{ - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL_Exported_Types STM324xG EVAL LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED1 = 0, - LED2 = 1, - LED3 = 2, - LED4 = 3 -}Led_TypeDef; - -typedef enum -{ - BUTTON_WAKEUP = 0, - BUTTON_TAMPER = 1, - BUTTON_KEY = 2, - BUTTON_RIGHT = 3, - BUTTON_LEFT = 4, - BUTTON_UP = 5, - BUTTON_DOWN = 6, - BUTTON_SEL = 7 -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - JOY_MODE_GPIO = 0, - JOY_MODE_EXTI = 1 -}JOYMode_TypeDef; - -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 -}JOYState_TypeDef; - -typedef enum -{ - COM1 = 0, - COM2 = 1 -}COM_TypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL_Exported_Constants STM324xG EVAL LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM324xG_EVAL board - */ -#if !defined (USE_STM324xG_EVAL) - #define USE_STM324xG_EVAL -#endif - -/** @addtogroup STM324xG_EVAL_LOW_LEVEL_LED STM324xG EVAL LOW LEVEL LED - * @{ - */ -#define LEDn 4 - -#define LED1_PIN GPIO_PIN_6 -#define LED1_GPIO_PORT GPIOG -#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LED2_PIN GPIO_PIN_8 -#define LED2_GPIO_PORT GPIOG -#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LED3_PIN GPIO_PIN_9 -#define LED3_GPIO_PORT GPIOI -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() - -#define LED4_PIN GPIO_PIN_7 -#define LED4_GPIO_PORT GPIOC -#define LED4_GPIO_CLK RCC_AHB1Periph_GPIOC -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED2_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 3) LED4_GPIO_CLK_ENABLE(); \ - }while(0) -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED1_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED2_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 2) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 3) LED4_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @addtogroup STM324xG_EVAL_LOW_LEVEL_BUTTON STM324xG EVAL LOW LEVEL BUTTON - * @{ - */ -/* Joystick pins are connected to IO Expander (accessible through I2C1 interface) */ -#define BUTTONn 3 - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -/** - * @brief Tamper push-button - */ -#define TAMPER_BUTTON_PIN GPIO_PIN_13 -#define TAMPER_BUTTON_GPIO_PORT GPIOC -#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -/** - * @brief Key push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_15 -#define KEY_BUTTON_GPIO_PORT GPIOG -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_DISABLE(); else \ - if ((__INDEX__) == 2) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @addtogroup STM324xG_EVAL_LOW_LEVEL_COM STM324xG EVAL LOW LEVEL COM - * @{ - */ -#define COMn 1 - -/** - * @brief Definition for COM port1, connected to USART3 - */ -#define EVAL_COM1 USART3 -#define EVAL_COM1_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE() -#define EVAL_COM1_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE() - -#define EVAL_COM1_TX_PIN GPIO_PIN_10 -#define EVAL_COM1_TX_GPIO_PORT GPIOC -#define EVAL_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define EVAL_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define EVAL_COM1_TX_AF GPIO_AF7_USART3 - -#define EVAL_COM1_RX_PIN GPIO_PIN_11 -#define EVAL_COM1_RX_GPIO_PORT GPIOC -#define EVAL_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define EVAL_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define EVAL_COM1_RX_AF GPIO_AF7_USART3 - -#define EVAL_COM1_IRQn USART3_IRQn - -#define EVAL_COMx_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_CLK_DISABLE(); \ - }while(0) - -#define EVAL_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_TX_GPIO_CLK_DISABLE(); \ - }while(0) - -#define EVAL_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_ENABLE(); \ - }while(0) -#define EVAL_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) EVAL_COM1_RX_GPIO_CLK_DISABLE(); \ - }while(0) - -/** - * @brief Joystick Pins definition - */ -#define JOY_SEL_PIN IO_PIN_7 -#define JOY_DOWN_PIN IO_PIN_6 -#define JOY_LEFT_PIN IO_PIN_5 -#define JOY_RIGHT_PIN IO_PIN_4 -#define JOY_UP_PIN IO_PIN_3 -#define JOY_NONE_PIN JOY_ALL_PINS -#define JOY_ALL_PINS (IO_PIN_3 | IO_PIN_4 | IO_PIN_5 | IO_PIN_6 | IO_PIN_7) - -/* Exported constantIO -------------------------------------------------------*/ -/* I2C clock speed configuration (in Hz) - WARNING: - Make sure that this define is not already declared in other files (ie. - stm324xg_eval.h file). It can be used in parallel by other modules. */ -#ifndef BSP_I2C_SPEED - #define BSP_I2C_SPEED 100000 -#endif /* BSP_I2C_SPEED */ - -#define IO_I2C_ADDRESS 0x88 -#define TS_I2C_ADDRESS 0x82 -#define CAMERA_I2C_ADDRESS 0x60 -#define AUDIO_I2C_ADDRESS 0x94 -/* For M24C64 devices, E0, E1 and E2 pins are all used for device - address selection (no need for additional address lines). According to the - Hardware connection on the board (on STM324xG-EVAL board E0 = E1 = E2 = 0) */ -#define EEPROM_I2C_ADDRESS 0xA0 - -/* User can use this section to tailor I2Cx/I2Cx instance used and associated - resources */ -/* Definition for I2Cx clock resources */ -#define EVAL_I2Cx I2C1 -#define EVAL_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define EVAL_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define EVAL_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() - -#define EVAL_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define EVAL_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define EVAL_I2Cx_SCL_PIN GPIO_PIN_6 -#define EVAL_I2Cx_SCL_SDA_GPIO_PORT GPIOB -#define EVAL_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1 -#define EVAL_I2Cx_SDA_PIN GPIO_PIN_9 - -/* I2C interrupt requests */ -#define EVAL_I2Cx_EV_IRQn I2C1_EV_IRQn -#define EVAL_I2Cx_ER_IRQn I2C1_ER_IRQn - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LOW_LEVEL_Exported_Functions STM324xG EVAL LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart); -uint8_t BSP_JOY_Init(JOYMode_TypeDef Joy_Mode); -JOYState_TypeDef BSP_JOY_GetState(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.c deleted file mode 100644 index e560b0554c..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.c +++ /dev/null @@ -1,658 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM324xG-EVAL evaluation - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM324xG-EVAL Evaluation board. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or - OUTPUT_DEVICE_BOTH) - Volume: initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - If the returned value is different from 0 or the function is stuck then the communication with - the codec or the IOExpander has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented - into the audio jack on the evaluation board). When the Headphone is connected it is used - as output. When the headphone is disconnected from the audio jack, the output is - automatically switched to Speaker. - - OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size: size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the stm324xg_eval_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level or to mute, use the functions - BSP_AUDIO_OUT_Stop(), BSP_AUDIO_OUT_SetVolume(), AUDIO_OUT_SetFrequency() BSP_AUDIO_OUT_SetOutputMode and BSP_AUDIO_OUT_SetMute(). - + The driver API and the callback functions are at the end of the stm324xg_eval_audio.h file. - -Driver architecture: - ------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm324xg_eval_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm324xg_eval_audio_codec.c file (I2Sx_MspInit() and I2Sx_Init()) - - Known Limitations: -------------------- - 1- When using the Speaker, if the audio file quality is not high enough, the speaker output - may produce high and uncomfortable noise level. To avoid this issue, to use speaker - output properly, try to increase audio file sampling rate (typically higher than 48KHz). - This operation will lead to larger file size. - 2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some - user interrupt routines (in this case, interrupts could be disabled just before the start of - communication then re-enabled when it is over). Note that this communication is only done at - the configuration phase (BSP_AUDIO_OUT_Init() or BSP_AUDIO_OUT_Stop()) and when Volume control modification is - performed (BSP_AUDIO_OUT_SetVolume() or AUDIO_OUT_Mute() or BSP_AUDIO_OUT_SetOutputMode()). - When the audio data is played, no communication is required with the audio codec. - 3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 4- Supports only Stereo audio streaming. To play mono audio streams, each data should be sent twice - on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing. - 5- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_audio.h" -#include "stm324xg_eval_io.h" /* IOExpander driver is included in order to allow - CS43L22 codec reset pin management on the evaluation board */ -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_AUDIO STM324xG EVAL AUDIO - * @brief This file includes the low layer audio driver available on STM324xG-EVAL - * evaluation board. - * @{ - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Private_Defines STM324xG EVAL AUDIO Private Defines - * @{ - */ -/* These PLL parameters are valid when the f(VCO clock) = 1Mhz */ -const uint32_t I2SFreq[8] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000}; -const uint32_t I2SPLLN[8] = {256, 429, 213, 429, 426, 271, 258, 344}; -const uint32_t I2SPLLR[8] = {5, 4, 4, 4, 4, 6, 3, 1}; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Private_Variables STM324xG EVAL AUDIO Private Variables - * @{ - */ -AUDIO_DrvTypeDef *audio_drv; -I2S_HandleTypeDef haudio_i2s; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Private_Function_Prototypes STM324xG EVAL AUDIO Private Function Prototypes - * @{ - */ -static void I2Sx_Init(uint32_t AudioFreq); -static void I2Sx_DeInit(void); -static void CODEC_Reset(void); -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Private_Functions STM324xG EVAL AUDIO Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This function configure also that the I2S PLL input clock. - * @retval 0 if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - - /* Disable I2S */ - I2Sx_DeInit(); - - /* Configure PLL clock depending on AudioFreq */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - haudio_i2s.Instance = AUDIO_I2Sx; - if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET) - { - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL); - } - /* Configure the I2S peripheral */ - I2Sx_Init(AudioFreq); - - /* Reset the Codec Registers */ - CODEC_Reset(); - - if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID) - { - /* Initialize the audio driver structure */ - audio_drv = &cs43l22_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief De-initialize the audio peripherals. - * @retval None - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - I2Sx_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspDeInit(&haudio_i2s, NULL); -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&haudio_i2s, pBuffer, DMA_MAX(Size/AUDIODATA_SIZE)); - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: Pointer to data address - * @param Size: Number of data to be written. - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&haudio_i2s, pData, Size); -} - -/** - * @brief Pauses the audio file stream. - * In case of using DMA, the DMA Pause feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Resumes the audio file stream. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&haudio_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_I2S_DMAStop(&haudio_i2s); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 1ms */ - HAL_Delay(1); - - /* Reset the pin */ - BSP_IO_WritePin(AUDIO_RESET_PIN, RESET); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @note This function modifies a global variable of the audio codec driver: OutputDev. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output Device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* Configure PLL clock depending on AudioFreq */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* Update the I2S audio frequency configuration */ - I2Sx_Init(AudioFreq); -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @retval None - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef RCC_ExCLKInitStruct; - uint8_t index = 0, freqindex = 0xFF; - - for(index = 0; index < 8; index++) - { - if(I2SFreq[index] == AudioFreq) - { - freqindex = index; - } - } - HAL_RCCEx_GetPeriphCLKConfig(&RCC_ExCLKInitStruct); - if(freqindex != 0xFF) - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = I2SPLLN[freqindex]; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = I2SPLLR[freqindex]; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); - } - else /* Default PLL I2S configuration */ - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - RCC_ExCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SN = 258; - RCC_ExCLKInitStruct.PLLI2S.PLLI2SR = 3; - HAL_RCCEx_PeriphCLKConfig(&RCC_ExCLKInitStruct); - } -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: I2S handle - * @param Params - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2sTx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable I2S clock */ - AUDIO_I2Sx_CLK_ENABLE(); - - /* Enable SCK, SD and WS GPIO clock */ - AUDIO_I2Sx_SCK_SD_WS_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: WS, SCK and SD pins */ - GPIO_InitStruct.Pin = AUDIO_I2Sx_WS_PIN | AUDIO_I2Sx_SCK_PIN | AUDIO_I2Sx_SD_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = AUDIO_I2Sx_SCK_SD_WS_AF; - HAL_GPIO_Init(AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT, &GPIO_InitStruct); - - /* Enable MCK GPIO clock */ - AUDIO_I2Sx_MCK_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: MCK pin */ - GPIO_InitStruct.Pin = AUDIO_I2Sx_MCK_PIN; - HAL_GPIO_Init(AUDIO_I2Sx_MCK_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the DMA clock */ - AUDIO_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_I2Sx) - { - /* Configure the hdma_i2sTx handle parameters */ - hdma_i2sTx.Init.Channel = AUDIO_I2Sx_DMAx_CHANNEL; - hdma_i2sTx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2sTx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sTx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sTx.Init.PeriphDataAlignment = AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2sTx.Init.MemDataAlignment = AUDIO_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2sTx.Init.Mode = DMA_NORMAL; - hdma_i2sTx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_i2sTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sTx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sTx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_i2sTx.Instance = AUDIO_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2sTx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sTx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sTx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_I2Sx_DMAx_IRQ, AUDIO_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_I2Sx_DMAx_IRQ); -} - -/** - * @brief De-Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: I2S handle - * @param Params - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Disable I2S clock */ - AUDIO_I2Sx_CLK_DISABLE(); - - /* CODEC_I2S pins configuration: WS, SCK and SD pins */ - GPIO_InitStruct.Pin = AUDIO_I2Sx_WS_PIN | AUDIO_I2Sx_SCK_PIN | AUDIO_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: MCK pin */ - GPIO_InitStruct.Pin = AUDIO_I2Sx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_I2Sx_MCK_GPIO_PORT, GPIO_InitStruct.Pin); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm324xg_eval_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Transfer Half completed callbacks - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm324xg_eval_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ -/** - * @brief Initializes the Audio Codec audio interface (I2S). - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Init(uint32_t AudioFreq) -{ - /* Initialize the haudio_i2s Instance parameter */ - haudio_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX; - haudio_i2s.Init.Standard = I2S_STANDARD; - haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_i2s.Init.AudioFreq = AudioFreq; - haudio_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_i2s); -} - -/** - * @brief Deinitialize the Audio Codec audio interface (I2S). - */ -static void I2Sx_DeInit(void) -{ - /* Initialize the haudio_i2s Instance parameter */ - haudio_i2s.Instance = AUDIO_I2Sx; - - /* Disable I2S peripheral */ - __HAL_I2S_DISABLE(&haudio_i2s); - - HAL_I2S_DeInit(&haudio_i2s); -} - -/** - * @brief Resets the audio codec. It restores the default configuration of the - * codec (this function shall be called before initializing the codec). - * @note This function calls an external driver function: The IO Expander driver. - */ -static void CODEC_Reset(void) -{ - /* Configure the IO Expander (to use the Codec Reset pin mapped on the IOExpander) */ - BSP_IO_Init(); - - BSP_IO_ConfigPin(AUDIO_RESET_PIN, IO_MODE_OUTPUT); - - /* Power Down the codec */ - BSP_IO_WritePin(AUDIO_RESET_PIN, RESET); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(CODEC_RESET_DELAY); - - /* Power on the codec */ - BSP_IO_WritePin(AUDIO_RESET_PIN, SET); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(CODEC_RESET_DELAY); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.h deleted file mode 100644 index 82d5a639e6..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_audio.h +++ /dev/null @@ -1,158 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_AUDIO_H -#define __STM324xG_EVAL_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "../Components/cs43l22/cs43l22.h" -#include "stm324xg_eval.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_AUDIO - * @{ - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Exported_Constants STM324xG EVAL AUDIO Exported Constants - * @{ - */ -/* Audio Reset Pin definition */ -#define AUDIO_RESET_PIN IO_PIN_2 - -/* I2S peripheral configuration defines */ -#define AUDIO_I2Sx SPI2 -#define AUDIO_I2Sx_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() -#define AUDIO_I2Sx_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() -#define AUDIO_I2Sx_SCK_SD_WS_AF GPIO_AF5_SPI2 -#define AUDIO_I2Sx_SCK_SD_WS_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() -#define AUDIO_I2Sx_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_I2Sx_WS_PIN GPIO_PIN_0 -#define AUDIO_I2Sx_SCK_PIN GPIO_PIN_1 -#define AUDIO_I2Sx_SD_PIN GPIO_PIN_3 -#define AUDIO_I2Sx_MCK_PIN GPIO_PIN_6 -#define AUDIO_I2Sx_SCK_SD_WS_GPIO_PORT GPIOI -#define AUDIO_I2Sx_MCK_GPIO_PORT GPIOC - -/* I2S DMA Stream definitions */ -#define AUDIO_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_I2Sx_DMAx_STREAM DMA1_Stream4 -#define AUDIO_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_I2Sx_DMAx_IRQ DMA1_Stream4_IRQn -#define AUDIO_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define AUDIO_I2Sx_DMAx_IRQHandler DMA1_Stream4_IRQHandler - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ -/* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK 0x00 -#define AUDIO_ERROR 0x01 -#define AUDIO_TIMEOUT 0x02 - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ -/* Delay for the Codec to be correctly reset */ -#define CODEC_RESET_DELAY 5 - -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Exported_Macros STM324xG EVAL AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE) -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_AUDIO_Exported_Functions STM324xG EVAL AUDIO Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -void BSP_AUDIO_OUT_DeInit(void); -uint8_t BSP_AUDIO_OUT_Play(uint16_t *pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_AUDIO_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.c deleted file mode 100644 index 8620467e73..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.c +++ /dev/null @@ -1,462 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_camera.c - * @author MCD Application Team - * @brief This file includes the driver for Camera module mounted on - * STM324xG-EVAL evaluation board(MB786). - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info: ------------------------------------------------------------------ - User NOTES -1. How to use this driver: --------------------------- - - This driver is used to drive the Camera. - - The OV2640 component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the Camera using the BSP_CAMERA_Init() function. - o Start the Camera capture or snapshot using CAMERA_Start() function. - o Suspend, resume or stop the Camera capture using the following functions: - - BSP_CAMERA_Suspend() - - BSP_CAMERA_Resume() - - BSP_CAMERA_Stop() - - + Options - o Increase or decrease on the fly the brightness and/or contrast - using the following function: - - BSP_CAMERA_ContrastBrightnessConfig - o Add a special effect on the fly using the following functions: - - BSP_CAMERA_BlackWhiteConfig() - - BSP_CAMERA_ColorEffectConfig() - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_camera.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_CAMERA STM324xG EVAL CAMERA - * @{ - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Private_Variables STM324xG EVAL CAMERA Private Variables - * @{ - */ -static DCMI_HandleTypeDef hdcmi_eval; -CAMERA_DrvTypeDef *camera_drv; -uint32_t current_resolution; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Private_FunctionPrototypes STM324xG EVAL CAMERA Private FunctionPrototypes - * @{ - */ -static uint32_t GetSize(uint32_t resolution); -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Private_Functions STM324xG EVAL CAMERA Private Functions - * @{ - */ - -/** - * @brief Initializes the Camera. - * @param Resolution: Camera resolution - * @retval Camera status - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution) -{ - DCMI_HandleTypeDef *phdcmi; - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hdcmi_eval; - - /*** Configures the DCMI to interface with the Camera module ***/ - /* DCMI configuration */ - phdcmi->Init.CaptureRate = DCMI_CR_ALL_FRAME; - phdcmi->Init.HSPolarity = DCMI_HSPOLARITY_LOW; - phdcmi->Init.SynchroMode = DCMI_SYNCHRO_HARDWARE; - phdcmi->Init.VSPolarity = DCMI_VSPOLARITY_LOW; - phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B; - phdcmi->Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; - phdcmi->Instance = DCMI; - - /* DCMI Initialization */ - BSP_CAMERA_MspInit(); - HAL_DCMI_Init(phdcmi); - - if(ov2640_drv.ReadID(CAMERA_I2C_ADDRESS) == OV2640_ID) - { - /* Initialize the Camera driver structure */ - camera_drv = &ov2640_drv; - - /* Camera Init */ - camera_drv->Init(CAMERA_I2C_ADDRESS, Resolution); - - /* Return CAMERA_OK status */ - ret = CAMERA_OK; - } - - current_resolution = Resolution; - - return ret; -} - -/** - * @brief Starts the Camera capture in continuous mode. - * @param buff: pointer to the Camera output buffer - */ -void BSP_CAMERA_ContinuousStart(uint8_t *buff) -{ - /* Start the Camera capture */ - HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(current_resolution)); -} - -/** - * @brief Starts the Camera capture in snapshot mode. - * @param buff: pointer to the Camera output buffer - */ -void BSP_CAMERA_SnapshotStart(uint8_t *buff) -{ - /* Start the Camera capture */ - HAL_DCMI_Start_DMA(&hdcmi_eval, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(current_resolution)); -} - -/** - * @brief Suspends the Camera capture. - */ -void BSP_CAMERA_Suspend(void) -{ - /* Suspend the Camera Capture */ - HAL_DCMI_Suspend(&hdcmi_eval); -} - -/** - * @brief Resumes the Camera capture. - */ -void BSP_CAMERA_Resume(void) -{ - /* Start the Camera Capture */ - HAL_DCMI_Resume(&hdcmi_eval); -} - -/** - * @brief Stops the Camera capture. - * @retval Camera status - */ -uint8_t BSP_CAMERA_Stop(void) -{ - DCMI_HandleTypeDef *phdcmi; - - uint8_t ret = CAMERA_ERROR; - - /* Get the DCMI handle structure */ - phdcmi = &hdcmi_eval; - - if(HAL_DCMI_Stop(phdcmi) == HAL_OK) - { - ret = CAMERA_OK; - } - - return ret; -} - -/** - * @brief Configures the Camera contrast and brightness. - * @param contrast_level: Contrast level - * This parameter can be one of the following values: - * @arg CAMERA_CONTRAST_LEVEL4: for contrast +2 - * @arg CAMERA_CONTRAST_LEVEL3: for contrast +1 - * @arg CAMERA_CONTRAST_LEVEL2: for contrast 0 - * @arg CAMERA_CONTRAST_LEVEL1: for contrast -1 - * @arg CAMERA_CONTRAST_LEVEL0: for contrast -2 - * @param brightness_level: Brightness level - * This parameter can be one of the following values: - * @arg CAMERA_BRIGHTNESS_LEVEL4: for brightness +2 - * @arg CAMERA_BRIGHTNESS_LEVEL3: for brightness +1 - * @arg CAMERA_BRIGHTNESS_LEVEL2: for brightness 0 - * @arg CAMERA_BRIGHTNESS_LEVEL1: for brightness -1 - * @arg CAMERA_BRIGHTNESS_LEVEL0: for brightness -2 - */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level); - } -} - -/** - * @brief Configures the Camera white balance. - * @param Mode: black_white mode - * This parameter can be one of the following values: - * @arg CAMERA_BLACK_WHITE_BW - * @arg CAMERA_BLACK_WHITE_NEGATIVE - * @arg CAMERA_BLACK_WHITE_BW_NEGATIVE - * @arg CAMERA_BLACK_WHITE_NORMAL - */ -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_BLACK_WHITE, Mode, 0); - } -} - -/** - * @brief Configures the Camera color effect. - * @param Effect: Color effect - * This parameter can be one of the following values: - * @arg CAMERA_COLOR_EFFECT_ANTIQUE - * @arg CAMERA_COLOR_EFFECT_BLUE - * @arg CAMERA_COLOR_EFFECT_GREEN - * @arg CAMERA_COLOR_EFFECT_RED - */ -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect) -{ - if(camera_drv->Config != NULL) - { - camera_drv->Config(CAMERA_I2C_ADDRESS, CAMERA_COLOR_EFFECT, Effect, 0); - } -} - -/** - * @brief Handles DCMI interrupt request. - */ -void BSP_CAMERA_IRQHandler(void) -{ - HAL_DCMI_IRQHandler(&hdcmi_eval); -} - -/** - * @brief Handles DMA interrupt request. - */ -void BSP_CAMERA_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(hdcmi_eval.DMA_Handle); -} - -/** - * @brief Get the capture size. - * @param resolution: the current resolution. - * @retval cpature size - */ -static uint32_t GetSize(uint32_t resolution) -{ - uint32_t size = 0; - - /* Get capture size */ - switch (resolution) - { - case CAMERA_R160x120: - { - size = 0x2580; - } - break; - case CAMERA_R320x240: - { - size = 0x9600; - } - break; - default: - { - break; - } - } - - return size; -} - -/** - * @brief Initializes the DCMI MSP. - */ -__weak void BSP_CAMERA_MspInit(void) -{ - static DMA_HandleTypeDef hdma; - GPIO_InitTypeDef GPIO_Init_Structure; - DCMI_HandleTypeDef *hdcmi = &hdcmi_eval; - - /*** Enable peripherals and GPIO clocks ***/ - /* Enable DCMI clock */ - __HAL_RCC_DCMI_CLK_ENABLE(); - - /* Enable DMA2 clock */ - __HAL_RCC_DMA2_CLK_ENABLE(); - - /* Enable GPIO clocks */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOH_CLK_ENABLE(); - __HAL_RCC_GPIOI_CLK_ENABLE(); - - /*** Configure the GPIO ***/ - /* Configure DCMI GPIO as alternate function */ - GPIO_Init_Structure.Pin = GPIO_PIN_6; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOA, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |\ - GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOH, &GPIO_Init_Structure); - - GPIO_Init_Structure.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 |\ - GPIO_PIN_7; - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF13_DCMI; - HAL_GPIO_Init(GPIOI, &GPIO_Init_Structure); - - /*** Configure the DMA streams ***/ - /* Configure the DMA handler for Transmission process */ - hdma.Init.Channel = DMA_CHANNEL_1; - hdma.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma.Init.PeriphInc = DMA_PINC_DISABLE; - hdma.Init.MemInc = DMA_MINC_ENABLE; - hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma.Init.Mode = DMA_CIRCULAR; - hdma.Init.Priority = DMA_PRIORITY_HIGH; - hdma.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma.Init.MemBurst = DMA_MBURST_SINGLE; - hdma.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma.Instance = DMA2_Stream1; - - /* Associate the initialized DMA handle to the DCMI handle */ - __HAL_LINKDMA(hdcmi, DMA_Handle, hdma); - - /*** Configure the NVIC for DCMI and DMA ***/ - /* NVIC configuration for DCMI transfer complete interrupt */ - HAL_NVIC_SetPriority(DCMI_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DCMI_IRQn); - - /* NVIC configuration for DMA2 transfer complete interrupt */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - - /* Configure the DMA stream */ - HAL_DMA_Init(hdcmi->DMA_Handle); -} - -/** - * @brief Line event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_LineEventCallback(); -} - -/** - * @brief Line Event callback. - */ -__weak void BSP_CAMERA_LineEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_LineEventCallback could be implemented in the user file - */ -} - -/** - * @brief VSYNC event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_VsyncEventCallback(); -} - -/** - * @brief VSYNC Event callback. - */ -__weak void BSP_CAMERA_VsyncEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_VsyncEventCallback could be implemented in the user file - */ -} - -/** - * @brief Frame event callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_FrameEventCallback(); -} - -/** - * @brief Frame Event callback. - */ -__weak void BSP_CAMERA_FrameEventCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_FrameEventCallback could be implemented in the user file - */ -} - -/** - * @brief Error callback - * @param hdcmi: pointer to the DCMI handle - */ -void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) -{ - BSP_CAMERA_ErrorCallback(); -} - -/** - * @brief Error callback. - */ -__weak void BSP_CAMERA_ErrorCallback(void) -{ - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_DCMI_ErrorCallback could be implemented in the user file - */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.h deleted file mode 100644 index d110ec4399..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_camera.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_camera.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm324xg_eval_camera.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_CAMERA_H -#define __STM324xG_EVAL_CAMERA_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" -#include "stm324xg_eval_io.h" - -/* Include Camera component Driver */ -#include "../Components/ov2640/ov2640.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_CAMERA - * @{ - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Exported_Types STM324xG EVAL CAMERA Exported Types - * @{ - */ - -/** - * @brief Camera status structure definition - */ -typedef enum -{ - CAMERA_OK = 0x00, - CAMERA_ERROR = 0x01, - CAMERA_TIMEOUT = 0x02 -}Camera_StatusTypeDef; - -#define RESOLUTION_R160x120 CAMERA_R160x120 /* QQVGA Resolution */ -#define RESOLUTION_R320x240 CAMERA_R320x240 /* QVGA Resolution */ - -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Exported_Constants STM324xG EVAL CAMERA Exported Constants - * @{ - */ -#define CAMERA_I2C_ADDRESS 0x60 -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_CAMERA_Exported_Functions STM324xG EVAL CAMERA Exported Functions - * @{ - */ -uint8_t BSP_CAMERA_Init(uint32_t Resolution); -void BSP_CAMERA_ContinuousStart(uint8_t *buff); -void BSP_CAMERA_SnapshotStart(uint8_t *buff); -void BSP_CAMERA_Suspend(void); -void BSP_CAMERA_Resume(void); -uint8_t BSP_CAMERA_Stop(void); -void BSP_CAMERA_LineEventCallback(void); -void BSP_CAMERA_VsyncEventCallback(void); -void BSP_CAMERA_FrameEventCallback(void); -void BSP_CAMERA_ErrorCallback(void); -void BSP_CAMERA_MspInit(void); - -/* Camera features functions prototype */ -void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level); -void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode); -void BSP_CAMERA_ColorEffectConfig(uint32_t Effect); - -/* To be called in DCMI_IRQHandler function */ -void BSP_CAMERA_IRQHandler(void); -/* To be called in DMA2_Stream1_IRQHandler function */ -void BSP_CAMERA_DMA_IRQHandler(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_CAMERA_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.c deleted file mode 100644 index 13af423592..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.c +++ /dev/null @@ -1,388 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_eeprom.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage an I2C M24C64 - * EEPROM memory. - * - * =================================================================== - * Notes: - * - This driver is intended for STM32F4xx families devices only. - * - The I2C EEPROM memory (M24C64) is available on STM324xG-EVAL - * - To use this driver you have to connect the eeprom jumper (JP24). - * =================================================================== - * - * It implements a high level communication layer for read and write - * from/to this memory. The needed STM32F4xx hardware resources (I2C and - * GPIO) are defined in stm32f4xg_eval.h file, and the initialization is - * performed in EEPROM_IO_Init() function declared in stm32f4xg_eval.c - * file. - * You can easily tailor this driver to any other development board, - * by just adapting the defines for hardware resources and - * EEPROM_IO_Init() function. - * - * @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() - * and EEPROM_WritePage()) use Polling mode to perform the data transfer - * to/from EEPROM memory. - * - * +-----------------------------------------------------------------+ - * | Pin assignment for M24C64 EEPROM | - * +---------------------------------------+-----------+-------------+ - * | STM32F4xx I2C Pins | EEPROM | Pin | - * +---------------------------------------+-----------+-------------+ - * | . | E0 | 1 (0V) | - * | . | E1 | 2 (0V) | - * | . | E2 | 3 (0V) | - * | . | VSS(GND)| 4 (0V) | - * | SDA | SDA | 5 | - * | SCL | SCL | 6 | - * | JP24 | /WS | 7 | - * | . | VDD | 8 (3.3V) | - * +---------------------------------------+-----------+-------------+ - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_eeprom.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_EEPROM STM324xG EVAL EEPROM - * @brief This file includes the I2C EEPROM driver of STM32F4xG-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM324xG_EVAL_EEPROM_Private_Variables STM324xG EVAL EEPROM Private Variables - * @{ - */ -__IO uint32_t EEPROMTimeout = EEPROM_READ_TIMEOUT; -__IO uint16_t EEPROMDataRead; -__IO uint8_t EEPROMDataWrite; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_EEPROM_Private_Function_Prototypes STM324xG EVAL EEPROM Private Function Prototypes - * @{ - */ -static uint32_t EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite); -static uint32_t EEPROM_WaitEepromStandbyState(void); -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_EEPROM_Private_Functions STM324xG EVAL EEPROM Private Functions - * @{ - */ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) - */ -uint32_t BSP_EEPROM_Init(void) -{ - /* I2C Initialization */ - EEPROM_IO_Init(); - - /* Select the EEPROM address and check if OK */ - if(EEPROM_IO_IsDeviceReady(EEPROM_I2C_ADDRESS, EEPROM_MAX_TRIALS) != HAL_OK) - { - return EEPROM_FAIL; - } - return EEPROM_OK; -} - -/** - * @brief Reads a block of data from the EEPROM. - * @param pBuffer: pointer to the buffer that receives the data read from - * the EEPROM. - * @param ReadAddr: EEPROM's internal address to start reading from. - * @param NumByteToRead: pointer to the variable holding number of bytes to - * be read from the EEPROM. - * - * @note The variable pointed by NumByteToRead is reset to 0 when all the - * data are read from the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead) -{ - uint32_t buffersize = *NumByteToRead; - - /* Set the pointer to the Number of data to be read */ - EEPROMDataRead = *NumByteToRead; - - if(EEPROM_IO_ReadData(EEPROM_I2C_ADDRESS, ReadAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer: pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint8_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if(addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if(numofsingle!=0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if(numofpage == 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if(NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if(count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while(numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if(numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex)); - if(status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer: pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr: EEPROM's internal address to write to. - * @param NumByteToWrite: pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -static uint32_t EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - - /* Set the pointer to the Number of data to be written */ - EEPROMDataWrite = *NumByteToWrite; - if(EEPROM_IO_WriteData(EEPROM_I2C_ADDRESS, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - status = EEPROM_FAIL; - } - - while(EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Waits for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -static uint32_t EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if(EEPROM_IO_IsDeviceReady(EEPROM_I2C_ADDRESS, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.h deleted file mode 100644 index f01f55d28d..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_eeprom.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32f4xg_eval_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xG_EVAL_EEPROM_H -#define __STM32F4xG_EVAL_EEPROM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_EEPROM - * @brief This file includes the I2C EEPROM driver of STM32F4xG-EVAL evaluation board. - * @{ - */ - -/** @defgroup STM324xG_EVAL_EEPROM_Exported_Constants STM324xG EVAL EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE 32 -#define EEPROM_MAX_SIZE 0x2000 /* 64Kbit*/ -/* Maximum Timeout values for flags and events waiting loops: This timeout is based - on systick set to 1ms. - Timeout for read based if read all the EEPROM: EEPROM_MAX_SIZE * BSP_I2C_SPEED (640ms) */ -#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) -/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * BSP_I2C_SPEED (320us)*/ -#define EEPROM_WRITE_TIMEOUT ((uint32_t)(1000)) - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS 3000 - -#define EEPROM_OK 0 -#define EEPROM_FAIL 1 -#define EEPROM_TIMEOUT 2 -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_EEPROM_Exported_Functions STM324xG EVAL EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t *pBuffer, uint16_t ReadAddr, uint16_t *NumByteToRead); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occurs during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xG_EVAL_EEPROM_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.c deleted file mode 100644 index 29a8622913..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.c +++ /dev/null @@ -1,214 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_io.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the IO pins - * on STM324xG-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IO module of the STM324xG-EVAL evaluation - board. - - The STMPE811 IO expander device component driver must be included with this - driver in order to run the IO functionalities commanded by the IO expander - device mounted on the evaluation board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the IO module using the BSP_IO_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the IO functionalities use. - - + IO functionalities use - o The IO pin mode is configured when calling the function BSP_IO_ConfigPin(), you - must specify the desired IO mode by choosing the "IO_ModeTypedef" parameter - predefined value. - o If an IO pin is used in interrupt mode, the function BSP_IO_ITGetStatus() is - needed to get the interrupt status. To clear the IT pending bits, you should - call the function BSP_IO_ITClear() with specifying the IO pending bit to clear. - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - o To get/set an IO pin combination state you can use the functions - BSP_IO_ReadPin()/BSP_IO_WritePin() or the function BSP_IO_TogglePin() to toggle the pin - state. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_IO STM324xG EVAL IO - * @{ - */ - -/** @defgroup STM324xG_EVAL_IO_Private_Types_Definitions STM324xG EVAL IO Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_IO_Private_Variables STM324xG EVAL IO Private Variables - * @{ - */ -static IO_DrvTypeDef *io_driver; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_IO_Private_Functions STM324xG EVAL IO Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the IO functionalities and configures all - * necessary hardware resources (GPIOs, clocks..). - * @note BSP_IO_Init() is using HAL_Delay() function to ensure that stmpe811 - * IO Expander is correctly reset. HAL_Delay() function provides accurate - * delay (in milliseconds) based on variable incremented in SysTick ISR. - * This implies that if BSP_IO_Init() is called from a peripheral ISR process, - * then the SysTick interrupt must have higher priority (numerically lower) - * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_Init(void) -{ - uint8_t ret = IO_ERROR; - - if(stmpe811_io_drv.ReadID(IO_I2C_ADDRESS) == STMPE811_ID) - { - /* Initialize the IO driver structure */ - io_driver = &stmpe811_io_drv; - - io_driver->Init(IO_I2C_ADDRESS); - io_driver->Start(IO_I2C_ADDRESS, IO_PIN_ALL); - - ret = IO_OK; - } - - return ret; -} - -/** - * @brief Gets the selected pins IT status. - * @param IO_Pin: Selected pins to check the status. - * This parameter can be any combination of the IO pins. - * @retval IO_OK: if read status OK. Other value if error. - */ -uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin) -{ - /* Return the IO Pin IT status */ - return (io_driver->ITStatus(IO_I2C_ADDRESS, IO_Pin)); -} - -/** - * @brief Clears the selected IO IT pending bit. - * @param IO_Pin: Selected pins to check the status. - * This parameter can be any combination of the IO pins. - */ -void BSP_IO_ITClear(uint16_t IO_Pin) -{ - io_driver->ClearIT(IO_I2C_ADDRESS, IO_Pin); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param IO_Pin: Output pin to be set or reset. - * This parameter can be one of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7 - * @param IO_Mode: IO pin mode to configure - * This parameter can be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - * @retval IO_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode) -{ - /* Configure the selected IO pin(s) mode */ - io_driver->Config(IO_I2C_ADDRESS, IO_Pin, IO_Mode); - - return IO_OK; -} - -/** - * @brief Sets the selected pins state. - * @param IO_Pin: Selected pins to write. - * This parameter can be any combination of the IO pins. - * @param PinState: New pins state to write - */ -void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState) -{ - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, PinState); -} - -/** - * @brief Gets the selected pins current state. - * @param IO_Pin: Selected pins to read. - * This parameter can be any combination of the IO pins. - * @retval The current pins state - */ -uint16_t BSP_IO_ReadPin(uint16_t IO_Pin) -{ - return(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin)); -} - -/** - * @brief Toggles the selected pins state - * @param IO_Pin: Selected pins to toggle. - * This parameter can be any combination of the IO pins. - */ -void BSP_IO_TogglePin(uint16_t IO_Pin) -{ - if(io_driver->ReadPin(IO_I2C_ADDRESS, IO_Pin) == 1) /* Set */ - { - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 0); /* Reset */ - } - else - { - io_driver->WritePin(IO_I2C_ADDRESS, IO_Pin, 1); /* Set */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.h deleted file mode 100644 index 3220b2b573..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_io.h +++ /dev/null @@ -1,105 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_io.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_io.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_IO_H -#define __STM324xG_EVAL_IO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" -/* Include IO component driver */ -#include "../Components/stmpe811/stmpe811.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_IO STM324xG EVAL IO - * @{ - */ - -/** @defgroup STM324xG_EVAL_IO_Exported_Types STM324xG EVAL IO Exported Types - * @{ - */ -typedef enum -{ - IO_OK = 0x00, - IO_ERROR = 0x01, - IO_TIMEOUT = 0x02 -}IO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_IO_Exported_Constants STM324xG EVAL IO Exported Constants - * @{ - */ -#define IO_PIN_0 0x01 -#define IO_PIN_1 0x02 -#define IO_PIN_2 0x04 -#define IO_PIN_3 0x08 -#define IO_PIN_4 0x10 -#define IO_PIN_5 0x20 -#define IO_PIN_6 0x40 -#define IO_PIN_7 0x80 -#define IO_PIN_ALL 0xFF -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_IO_Exported_Functions STM324xG EVAL IO Exported Functions - * @{ - */ -uint8_t BSP_IO_Init(void); -void BSP_IO_ITClear(uint16_t IO_Pin); -uint8_t BSP_IO_ITGetStatus(uint16_t IO_Pin); -uint8_t BSP_IO_ConfigPin(uint16_t IO_Pin, IO_ModeTypedef IO_Mode); -void BSP_IO_WritePin(uint16_t IO_Pin, uint8_t PinState); -uint16_t BSP_IO_ReadPin(uint16_t IO_Pin); -void BSP_IO_TogglePin(uint16_t IO_Pin); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_IO_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.c deleted file mode 100644 index 250172475b..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.c +++ /dev/null @@ -1,1001 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM324xG-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive indirectly an LCD TFT. - - This driver supports the ILI9325 LCD mounted on MB785 daughter board - - The ILI9325 component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - - + Display on LCD - o Clear the hole LCD using the BSP_LCD_Clear() function or only one specified - string line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap, raw picture) - on LCD using a set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_LCD STM324xG EVAL LCD - * @{ - */ - -/** @defgroup STM324xG_EVAL_LCD_Private_Defines STM324xG EVAL LCD Private Defines - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + (Z))->X)) -#define POLY_Y(Z) ((int32_t)((Points + (Z))->Y)) -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Private_Macros STM324xG EVAL LCD Private Macros - * @{ - */ -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Private_Variables STM324xG EVAL LCD Private Variables - * @{ - */ -LCD_DrawPropTypeDef DrawProp; -static LCD_DrvTypeDef *lcd_drv; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Private_FunctionPrototypes STM324xG EVAL LCD Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Private_Functions STM324xG EVAL LCD Private Functions - * @{ - */ - -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - uint8_t ret = LCD_ERROR; - - /* Default value for draw propriety */ - DrawProp.BackColor = 0xFFFF; - DrawProp.pFont = &Font24; - DrawProp.TextColor = 0x0000; - - if(ili9325_drv.ReadID() == ILI9325_ID) - { - lcd_drv = &ili9325_drv; - - /* LCD Init */ - lcd_drv->Init(); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - ret = LCD_OK; - } - - return ret; -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return(lcd_drv->GetLcdPixelWidth()); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return(lcd_drv->GetLcdPixelHeight()); -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint16_t BSP_LCD_GetTextColor(void) -{ - return DrawProp.TextColor; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint16_t BSP_LCD_GetBackColor(void) -{ - return DrawProp.BackColor; -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code RGB(5-6-5) - */ -void BSP_LCD_SetTextColor(uint16_t Color) -{ - DrawProp.TextColor = Color; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Background color code RGB(5-6-5) - */ -void BSP_LCD_SetBackColor(uint16_t Color) -{ - DrawProp.BackColor = Color; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp.pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp.pFont; -} - -/** - * @brief Clears the hole LCD. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint16_t Color) -{ - uint32_t counter = 0; - uint32_t color_backup = DrawProp.TextColor; - DrawProp.TextColor = Color; - - for(counter = 0; counter < BSP_LCD_GetYSize(); counter++) - { - BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize()); - } - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Clears the selected line. - * @param Line: Line to be cleared - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - */ -void BSP_LCD_ClearStringLine(uint16_t Line) -{ - uint32_t color_backup = DrawProp.TextColor; - DrawProp.TextColor = DrawProp.BackColor;; - - /* Draw a rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height); - - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp.pFont->table[(Ascii-' ') *\ - DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters on the LCD. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp.pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp.pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Send the string character by character on lCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp.pFont->Width; - /* Point on the next character */ - Text++; - i++; - } -} - -/** - * @brief Displays a character on the LCD. - * @param Line: Line where to display the character shape - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint16_t ret = 0; - - if(lcd_drv->ReadPixel != NULL) - { - ret = lcd_drv->ReadPixel(Xpos, Ypos); - } - - return ret; -} - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in RGB mode (5-6-5) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code) -{ - if(lcd_drv->WritePixel != NULL) - { - lcd_drv->WritePixel(Xpos, Ypos, RGB_Code); - } -} - -/** - * @brief Draws an horizontal line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(lcd_drv->DrawHLine != NULL) - { - lcd_drv->DrawHLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel((Xpos + index), Ypos, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws a vertical line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(lcd_drv->DrawVLine != NULL) - { - lcd_drv->DrawVLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel(Xpos, Ypos + index, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws an uni-line (between two points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - CurX = 0; - CurY = Radius; - - while (CurX <= CurY) - { - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos - CurY), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos - CurY), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos - CurX), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos - CurX), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + CurX), (Ypos + CurY), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - CurX), (Ypos + CurY), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + CurY), (Ypos + CurX), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - CurY), (Ypos + CurX), DrawProp.TextColor); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } -} - -/** - * @brief Draws an poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - BSP_LCD_DrawLine(X, Y, Points->X, Points->Y); - } - -} - -/** - * @brief Draws an ellipse on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/K)), (Ypos-y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/K)), (Ypos-y), DrawProp.TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture (16 bpp). - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address. - */ -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t height = 0; - uint32_t width = 0; - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - SetDisplayWindow(Xpos, Ypos, width, height); - - if(lcd_drv->DrawBitmap != NULL) - { - lcd_drv->DrawBitmap(Xpos, Ypos, pbmp); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws RGB Image (16 bpp). - * @param Xpos: X position in the LCD - * @param Ypos: Y position in the LCD - * @param Xsize: X size in the LCD - * @param Ysize: Y size in the LCD - * @param pdata: Pointer to the RGB Image address. - */ -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - - SetDisplayWindow(Xpos, Ypos, Xsize, Ysize); - - if(lcd_drv->DrawRGBImage != NULL) - { - lcd_drv->DrawRGBImage(Xpos, Ypos, Xsize, Ysize, pdata); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws a full rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - BSP_LCD_SetTextColor(DrawProp.TextColor); - do - { - BSP_LCD_DrawHLine(Xpos, Ypos++, Width); - } - while(Height--); -} - -/** - * @brief Draws a full circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t D; /* Decision Variable */ - uint32_t CurX; /* Current X Value */ - uint32_t CurY; /* Current Y Value */ - - D = 3 - (Radius << 1); - - CurX = 0; - CurY = Radius; - - BSP_LCD_SetTextColor(DrawProp.TextColor); - - while (CurX <= CurY) - { - if(CurY > 0) - { - BSP_LCD_DrawHLine(Xpos - CurY, Ypos + CurX, 2*CurY); - BSP_LCD_DrawHLine(Xpos - CurY, Ypos - CurX, 2*CurY); - } - - if(CurX > 0) - { - BSP_LCD_DrawHLine(Xpos - CurX, Ypos - CurY, 2*CurX); - BSP_LCD_DrawHLine(Xpos - CurX, Ypos + CurY, 2*CurX); - } - if (D < 0) - { - D += (CurX << 2) + 6; - } - else - { - D += ((CurX - CurY) << 2) + 10; - CurY--; - } - CurX++; - } - - BSP_LCD_SetTextColor(DrawProp.TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - K = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos+y), (2*(uint16_t)(x/K) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/K)), (Ypos-y), (2*(uint16_t)(x/K) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Enables the display. - */ -void BSP_LCD_DisplayOn(void) -{ - lcd_drv->DisplayOn(); -} - -/** - * @brief Disables the display. - */ -void BSP_LCD_DisplayOff(void) -{ - lcd_drv->DisplayOff(); -} - -/****************************************************************************** - Static Function -*******************************************************************************/ - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp.pFont->Height; - width = DrawProp.pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Sets display window. - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - if(lcd_drv->SetDisplayWindow != NULL) - { - lcd_drv->SetDisplayWindow(Xpos, Ypos, Width, Height); - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.h deleted file mode 100644 index 61c46212a1..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_lcd.h +++ /dev/null @@ -1,181 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324XG_EVAL_LCD_H -#define __STM324XG_EVAL_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" -#include "../Components/ili9325/ili9325.h" -#include "../../../Utilities/Fonts/fonts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_LCD - * @{ - */ - -/** @defgroup STM324xG_EVAL_LCD_Exported_Types STM324xG EVAL LCD Exported Types - * @{ - */ -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -}LCD_DrawPropTypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Exported_Constants STM324xG EVAL LCD Exported Constants - * @{ - */ -/** - * @brief LCD status structure definition - */ -#define LCD_OK 0x00 -#define LCD_ERROR 0x01 -#define LCD_TIMEOUT 0x02 - -typedef struct -{ - int16_t X; - int16_t Y; -}Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* Center mode */ - RIGHT_MODE = 0x02, /* Right mode */ - LEFT_MODE = 0x03 /* Left mode */ -}Line_ModeTypdef; - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE 0x001F -#define LCD_COLOR_GREEN 0x07E0 -#define LCD_COLOR_RED 0xF800 -#define LCD_COLOR_CYAN 0x07FF -#define LCD_COLOR_MAGENTA 0xF81F -#define LCD_COLOR_YELLOW 0xFFE0 -#define LCD_COLOR_LIGHTBLUE 0x841F -#define LCD_COLOR_LIGHTGREEN 0x87F0 -#define LCD_COLOR_LIGHTRED 0xFC10 -#define LCD_COLOR_LIGHTCYAN 0x87FF -#define LCD_COLOR_LIGHTMAGENTA 0xFC1F -#define LCD_COLOR_LIGHTYELLOW 0xFFF0 -#define LCD_COLOR_DARKBLUE 0x0010 -#define LCD_COLOR_DARKGREEN 0x0400 -#define LCD_COLOR_DARKRED 0x8000 -#define LCD_COLOR_DARKCYAN 0x0410 -#define LCD_COLOR_DARKMAGENTA 0x8010 -#define LCD_COLOR_DARKYELLOW 0x8400 -#define LCD_COLOR_WHITE 0xFFFF -#define LCD_COLOR_LIGHTGRAY 0xD69A -#define LCD_COLOR_GRAY 0x8410 -#define LCD_COLOR_DARKGRAY 0x4208 -#define LCD_COLOR_BLACK 0x0000 -#define LCD_COLOR_BROWN 0xA145 -#define LCD_COLOR_ORANGE 0xFD20 - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_LCD_Exported_Functions STM324xG EVAL LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -uint16_t BSP_LCD_GetTextColor(void); -uint16_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetTextColor(__IO uint16_t Color); -void BSP_LCD_SetBackColor(__IO uint16_t Color); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -void BSP_LCD_Clear(uint16_t Color); -void BSP_LCD_ClearStringLine(uint16_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code); -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pbmp); -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324XG_EVAL_LCD_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.c deleted file mode 100644 index 918e89ae31..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.c +++ /dev/null @@ -1,498 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM324xG-EVAL - * evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM324xG-EVAL - evaluation board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the evaluation board. The SD detection interrupt - is handled by calling the function BSP_SD_DetectIT() which is called in the IRQ - handler file, the user callback is implemented in the function BSP_SD_DetectCallback(). - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypedef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_SD STM324xG EVAL SD - * @{ - */ - -/** @defgroup STM324xG_EVAL_SD_Private_Variables STM324xG EVAL SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_SD_Private_Functions STM324xG EVAL SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status. - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t SD_state = MSD_OK; - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Check if the SD card is plugged in the slot */ - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - SD_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(SD_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - SD_state = MSD_ERROR; - } - else - { - SD_state = MSD_OK; - } - } - - return SD_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns 0 - */ -uint8_t BSP_SD_ITConfig(void) -{ - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Configure Interrupt mode for SD detection pin */ - GPIO_Init_Structure.Mode = GPIO_MODE_IT_RISING_FALLING; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Pin = SD_DETECT_PIN; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_Init_Structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SD_DETECT_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SD_DETECT_IRQn); - - return 0; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if(HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != GPIO_PIN_RESET) - { - status = SD_NOT_PRESENT; - } - - return status; -} -/** - * @brief SD detect IT treatment - */ -void BSP_SD_DetectIT(void) -{ - /* SD detect IT callback */ - BSP_SD_DetectCallback(); - -} - -/** - * @brief SD detect IT detection callback - */ -__weak void BSP_SD_DetectCallback(void) -{ - /* NOTE: This function Should not be modified, when the callback is needed, - the BSP_SD_DetectCallback could be implemented in the user file - */ - -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dmaRxHandle; - static DMA_HandleTypeDef dmaTxHandle; - GPIO_InitTypeDef GPIO_Init_Structure; - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __SD_DETECT_GPIO_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &GPIO_Init_Structure); - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_2; - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* SD Card detect pin configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_INPUT; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Pin = SD_DETECT_PIN; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_Init_Structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dmaRxHandle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dmaRxHandle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dmaRxHandle.Init.PeriphInc = DMA_PINC_DISABLE; - dmaRxHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaRxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaRxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaRxHandle.Init.Mode = DMA_PFCTRL; - dmaRxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dmaRxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dmaRxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaRxHandle.Init.MemBurst = DMA_MBURST_INC4; - dmaRxHandle.Init.PeriphBurst = DMA_PBURST_INC4; - - dmaRxHandle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dmaRxHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaRxHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaRxHandle); - - /* Configure DMA Tx parameters */ - dmaTxHandle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dmaTxHandle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dmaTxHandle.Init.PeriphInc = DMA_PINC_DISABLE; - dmaTxHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaTxHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaTxHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaTxHandle.Init.Mode = DMA_PFCTRL; - dmaTxHandle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dmaTxHandle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dmaTxHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaTxHandle.Init.MemBurst = DMA_MBURST_INC4; - dmaTxHandle.Init.PeriphBurst = DMA_PBURST_INC4; - - dmaTxHandle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dmaTxHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaTxHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaTxHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - * @retval None - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - * @retval None - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - * @retval None - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - * @retval None - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.h deleted file mode 100644 index 68f9df86ef..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sd.h +++ /dev/null @@ -1,143 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_SD_H -#define __STM324xG_EVAL_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_SD - * @{ - */ - -/** @defgroup STM324xG_EVAL_SD_Exported_Types STM324xG EVAL SD Exported Types - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - - -/** @defgroup STM324xG_EVAL_SD_Exported_Constants STM324xG EVAL SD Exported Constants - * @{ - */ -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) - -#define SD_DETECT_PIN GPIO_PIN_13 -#define SD_DETECT_GPIO_PORT GPIOH -#define __SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE() -#define SD_DETECT_IRQn EXTI15_10_IRQn - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13) - -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_SD_Exported_Functions STM324xG EVAL SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_ITConfig(void); -void BSP_SD_DetectIT(void); -void BSP_SD_DetectCallback(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_SD_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.c deleted file mode 100644 index bd285f7a66..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.c +++ /dev/null @@ -1,305 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_sram.c - * @author MCD Application Team - * @brief This file includes the SRAM driver for the IS61WV102416BLL-10MLI memory - * device mounted on STM324xG-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the IS61WV102416BLL-10MLI SRAM external memory mounted - on STM324xG-EVAL evaluation board. - - This driver does not need a specific component driver for the SRAM device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the SRAM external memory using the BSP_SRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FMC controller configuration to interface with the external SRAM memory. - - + SRAM read/write operations - o SRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_SRAM_ReadData()/BSP_SRAM_WriteData(), or by DMA transfer using the functions - BSP_SRAM_ReadData_DMA()/BSP_SRAM_WriteData_DMA(). - o The AHB access is performed with 16-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) halfword transfer - (see the SRAM_MspInit() static function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_SRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_sram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_SRAM STM324xG EVAL SRAM - * @{ - */ - -/** @defgroup STM324xG_EVAL_SRAM_Private_Variables STM324xG EVAL SRAM Private Variables - * @{ - */ -static SRAM_HandleTypeDef sramHandle; -static FMC_NORSRAM_TimingTypeDef Timing; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_SRAM_Private_Functions STM324xG EVAL SRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the SRAM device. - * @retval SRAM status - */ -uint8_t BSP_SRAM_Init(void) -{ - sramHandle.Instance = FMC_NORSRAM_DEVICE; - sramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; - - /* SRAM device configuration */ - Timing.AddressSetupTime = 2; - Timing.AddressHoldTime = 1; - Timing.DataSetupTime = 2; - Timing.BusTurnAroundDuration = 1; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FSMC_ACCESS_MODE_A; - - sramHandle.Init.NSBank = FSMC_NORSRAM_BANK2; - sramHandle.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - sramHandle.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - sramHandle.Init.MemoryDataWidth = SRAM_MEMORY_WIDTH; - sramHandle.Init.BurstAccessMode = SRAM_BURSTACCESS; - sramHandle.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - sramHandle.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - sramHandle.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - sramHandle.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - sramHandle.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - sramHandle.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; - sramHandle.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - sramHandle.Init.WriteBurst = SRAM_WRITEBURST; - - /* SRAM controller initialization */ - BSP_SRAM_MspInit(); - if(HAL_SRAM_Init(&sramHandle, &Timing, &Timing) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the SRAM device in polling mode. - * @param uwStartAddress : Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress : Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_16b(&sramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the SRAM device in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval SRAM status - */ -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_DMA(&sramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return SRAM_ERROR; - } - else - { - return SRAM_OK; - } -} - -/** - * @brief Handles SRAM DMA transfer interrupt request. - */ -void BSP_SRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(sramHandle.hdma); -} - -/** - * @brief Initializes SRAM MSP. - */ -__weak void BSP_SRAM_MspInit(void) -{ - static DMA_HandleTypeDef dmaHandle; - GPIO_InitTypeDef GPIO_Init_Structure; - SRAM_HandleTypeDef *hsram = &sramHandle; - - /* Enable FMC clock */ - __HAL_RCC_FSMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __SRAM_DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP; - GPIO_Init_Structure.Pull = GPIO_PULLUP; - GPIO_Init_Structure.Speed = GPIO_SPEED_HIGH; - GPIO_Init_Structure.Alternate = GPIO_AF12_FSMC; - - /* GPIOD configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 |\ - GPIO_PIN_14 | GPIO_PIN_15; - - HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure); - - /* GPIOE configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &GPIO_Init_Structure); - - /* GPIOF configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure); - - /* GPIOG configuration */ - GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_9; - - HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure); - - - /* Configure common DMA parameters */ - dmaHandle.Init.Channel = SRAM_DMAx_CHANNEL; - dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; - dmaHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - dmaHandle.Init.Mode = DMA_NORMAL; - dmaHandle.Init.Priority = DMA_PRIORITY_HIGH; - dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaHandle.Init.MemBurst = DMA_MBURST_INC8; - dmaHandle.Init.PeriphBurst = DMA_PBURST_INC8; - - dmaHandle.Instance = SRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsram, hdma, dmaHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SRAM_DMAx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SRAM_DMAx_IRQn); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.h deleted file mode 100644 index a217a3f883..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_sram.h +++ /dev/null @@ -1,105 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_sram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_sram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_SRAM_H -#define __STM324xG_EVAL_SRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_SRAM - * @{ - */ - -/** @defgroup STM324xG_EVAL_SRAM_Exported_Constants STM324xG EVAL SRAM Exported Constants - * @{ - */ - -/** - * @brief SD status structure definition - */ -#define SRAM_OK 0x00 -#define SRAM_ERROR 0x01 - -#define SRAM_DEVICE_ADDR ((uint32_t)0x64000000) -#define SRAM_DEVICE_SIZE ((uint32_t)0x200000) /* SRAM device size in Bytes */ - -/* #define SRAM_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_8 */ -#define SRAM_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_16 - -#define SRAM_BURSTACCESS FSMC_BURST_ACCESS_MODE_DISABLE -/* #define SRAM_BURSTACCESS FSMC_BURST_ACCESS_MODE_ENABLE */ - -#define SRAM_WRITEBURST FSMC_WRITE_BURST_DISABLE -/* #define SRAM_WRITEBURST FSMC_WRITE_BURST_ENABLE */ - -/* DMA definitions for SRAM DMA transfer */ -#define __SRAM_DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SRAM_DMAx_STREAM DMA2_Stream0 -#define SRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_SRAM_Exported_Functions STM324xG EVAL SRAM Exported Functions - * @{ - */ -uint8_t BSP_SRAM_Init(void); -uint8_t BSP_SRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_SRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -void BSP_SRAM_DMA_IRQHandler(void); -void BSP_SRAM_MspInit(void); -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_SRAM_H */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.c b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.c deleted file mode 100644 index a191d7a021..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.c +++ /dev/null @@ -1,217 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the touch - * screen on STM324xG-EVAL evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM324xG-EVAL - evaluation board on the ILI9325 LCD mounted on MB785 daughter board . - - The STMPE811 IO expander device component driver must be included with this - driver in order to run the TS module commanded by the IO expander device - mounted on the evaluation board. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. - o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get - the interrupt status. To clear the IT pending bits, you should call the - function BSP_TS_ITClear(). - o The IT is handled using the corresponding external interrupt IRQ handler, - the user IT callback treatment is implemented on the same external interrupt - callback. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval_ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @defgroup STM324xG_EVAL_TS STM324xG EVAL TS - * @{ - */ - -/** @defgroup STM324xG_EVAL_TS_Private_Variables STM324xG EVAL TS Private Variables - * @{ - */ -static TS_DrvTypeDef *ts_driver; -static uint16_t ts_x_boundary, ts_y_boundary; -static uint8_t ts_orientation; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_TS_Private_Function_Prototypes STM324xG EVAL TS Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_TS_Private_Functions STM324xG EVAL TS Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, clocks..). - * @param xSize: Maximum X size of the TS area on LCD - * @param ySize: Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize) -{ - uint8_t ret = TS_ERROR; - - if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) - { - /* Initialize the TS driver structure */ - ts_driver = &stmpe811_ts_drv; - - /* Initialize x and y positions boundaries */ - ts_x_boundary = xSize; - ts_y_boundary = ySize; - ts_orientation = TS_SWAP_XY; - ret = TS_OK; - } - - if(ret == TS_OK) - { - /* Initialize the LL TS Driver */ - ts_driver->Init(TS_I2C_ADDRESS); - ts_driver->Start(TS_I2C_ADDRESS); - } - - return ret; -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - /* Call component driver to enable TS ITs */ - ts_driver->EnableIT(TS_I2C_ADDRESS); - - return TS_OK; -} - -/** - * @brief Gets the touch screen interrupt status. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITGetStatus(void) -{ - /* Call component driver to enable TS ITs */ - return (ts_driver->GetITStatus(TS_I2C_ADDRESS)); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x = 0, _y = 0; - uint16_t xDiff, yDiff , x , y; - uint16_t swap; - - TS_State->TouchDetected = ts_driver->DetectTouch(TS_I2C_ADDRESS); - - if(TS_State->TouchDetected) - { - ts_driver->GetXY(TS_I2C_ADDRESS, &x, &y); - - if(ts_orientation & TS_SWAP_X) - { - x = 4096 - x; - } - - if(ts_orientation & TS_SWAP_Y) - { - y = 4096 - y; - } - - if(ts_orientation & TS_SWAP_XY) - { - swap = y; - y = x; - x = swap; - } - - xDiff = x > _x? (x - _x): (_x - x); - yDiff = y > _y? (y - _y): (_y - y); - - if (xDiff + yDiff > 5) - { - _x = x; - _y = y; - } - - TS_State->x = (ts_x_boundary * _x) >> 12; - TS_State->y = (ts_y_boundary * _y) >> 12; - } - - return TS_OK; -} - -/** - * @brief Clears all touch screen interrupts. - */ -void BSP_TS_ITClear(void) -{ - ts_driver->ClearIT(TS_I2C_ADDRESS); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.h b/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.h deleted file mode 100644 index 23609d9e4a..0000000000 --- a/Drivers/BSP/STM324xG_EVAL/stm324xg_eval_ts.h +++ /dev/null @@ -1,106 +0,0 @@ -/** - ****************************************************************************** - * @file stm324xg_eval_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm324xg_eval_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM324xG_EVAL_TS_H -#define __STM324xG_EVAL_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm324xg_eval.h" -/* Include IOExpander(STMPE811) component Driver */ -#include "../Components/stmpe811/stmpe811.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM324xG_EVAL - * @{ - */ - -/** @addtogroup STM324xG_EVAL_TS - * @{ - */ - -/** @defgroup STM324xG_EVAL_TS_Exported_Types STM324xG EVAL TS Exported Types - * @{ - */ -typedef struct -{ - uint16_t TouchDetected; - uint16_t x; - uint16_t y; - uint16_t z; -}TS_StateTypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_TS_Exported_Constants STM324xG EVAL TS Exported Constants - * @{ - */ -#define TS_SWAP_NONE 0x00 -#define TS_SWAP_X 0x01 -#define TS_SWAP_Y 0x02 -#define TS_SWAP_XY 0x04 - -typedef enum -{ - TS_OK = 0x00, - TS_ERROR = 0x01, - TS_TIMEOUT = 0x02 -}TS_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM324xG_EVAL_TS_Exported_Functions STM324xG EVAL TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t xSize, uint16_t ySize); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ITConfig(void); -uint8_t BSP_TS_ITGetStatus(void); -void BSP_TS_ITClear(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM324xG_EVAL_TS_H */ diff --git a/Drivers/BSP/STM32F4-Discovery b/Drivers/BSP/STM32F4-Discovery new file mode 160000 index 0000000000..49fcaf442e --- /dev/null +++ b/Drivers/BSP/STM32F4-Discovery @@ -0,0 +1 @@ +Subproject commit 49fcaf442e7d9b5970567eb0c833d66d1333e726 diff --git a/Drivers/BSP/STM32F4-Discovery/LICENSE.md b/Drivers/BSP/STM32F4-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F4-Discovery/README.md b/Drivers/BSP/STM32F4-Discovery/README.md deleted file mode 100644 index d35b2d358a..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# BSP STM32F4-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f4-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f4-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F4-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f4-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22) -* [stm32-lis302dl](https://github.com/STMicroelectronics/stm32-lis302dl) -* [stm32-lis3dsh](https://github.com/STMicroelectronics/stm32-lis3dsh) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F4-Discovery/Release_Notes.html b/Drivers/BSP/STM32F4-Discovery/Release_Notes.html deleted file mode 100644 index 2983113e76..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/Release_Notes.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - Release Notes for STM32F4-Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F4-Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F4-Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32f4_discovery_audio.c/.h: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • Note -
      -
    • This version must be used with v3.0.0 of PDM library
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Replace __PPP_CLK_ENABLE/DISABLE with __HAL_RCC_PPP_ENABLE/DISABLE
  • -
  • Add BSP_AUDIO_OUT_ClockConfig, BSP_AUDIO_OUT_MspInit and BSP_AUDIO_OUT_MspDeInit as weak functions
  • -
  • Add BSP_AUDIO_IN_ClockConfig, BSP_AUDIO_IN_MspInit and BSP_AUDIO_IN_MspDeInit as weak functions
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F4-Discovery_BSP_User_Manual.chm file
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4_discovery.c -
      -
    • Add AUDIO_IO_DeInit() function to align with BSP Components Common drivers V4.0.0
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4_discovery.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE()
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4_discovery_accelerometer.h -
      -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
  • stm32f4_discovery_audio.c/.h -
      -
    • BSP_AUDIO_OUT_Init(): Fix limitation on the I2S clock configuration
    • -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
  • stm32f4_discovery.c/.h -
      -
    • Change I2C_SPEED used define by BSP_I2C_SPEED
    • -
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4_discovery_audio.c/.h -
      -
    • BSP_AUDIO_OUT_Play(): uses the buffer size in byte instead of half-word
    • -
    • BSP_AUDIO_IN_PDMToPCM(): duplicates samples to make stereo audio stream (since a single microphone in mounted on STM32F4-Discovery)
    • -
    • I2S2_Init(): configures the I2S to clock the microphone at 1.024 MHz as required instead of 2.048MHz
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4_discovery_audio.c/.h -
      -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
  • -
  • stm32f4_discovery_audio.c/.h -
      -
    • Add note that only the audio stereo format is supported
    • -
  • -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V1.1.2, and thus the 2 versions are not compatible.
  • -
  • This version has to be used only with STM32CubeF4 based development
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: license disclaimer text update and add link to the License file on ST Internet.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • PDM Library moved from Utilities32F4-Discovery to Utilities32_Audiofolder
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
  • stm32f4_discovery_audio_codec.c -
      -
    • Audio_MAL_Init() function: DMA configuration changed as below -
        -
      • DMA_FIFOMode_Disable changed to DMA_FIFOMode_Enable
      • -
      • DMA_FIFOThreshold_1QuarterFull changed to DMA_FIFOThreshold_HalfFull
      • -
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add PDM audio software decoding Library drivers, used to decode and reconstruct the audio signal produced by MP45DT02 MEMS microphone from STMicroelectronics. For more details about this Library, please refer to document “PDM audio software decoding on STM32 microcontrollers (AN3998)â€.
  • -
  • stm32f4_discovery_audio_codec.c/.h: update to use DMA instead of Interrupt in I2S communication with the external codec.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official version of the STM32F4-Discovery Board Drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F4-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32F4-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F4-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F4-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F4-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F4-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F4-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c b/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c deleted file mode 100644 index 7bd67e3f40..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.c +++ /dev/null @@ -1,682 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4_discovery.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage Leds and - * push-button available on STM32F4-Discovery Kit from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4_discovery.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY STM32F4 DISCOVERY - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL STM32F4 DISCOVERY LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F4-Discovery Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32F4 DISCOVERY LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Defines STM32F4 DISCOVERY LOW LEVEL Private Defines - * @{ - */ - - /** - * @brief STM32F4 DISCO BSP Driver version number V2.1.5 - */ -#define __STM32F4_DISCO_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32F4_DISCO_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32F4_DISCO_BSP_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */ -#define __STM32F4_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F4_DISCO_BSP_VERSION ((__STM32F4_DISCO_BSP_VERSION_MAIN << 24)\ - |(__STM32F4_DISCO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F4_DISCO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F4_DISCO_BSP_VERSION_RC)) -/** - * @} - */ - - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Macros STM32F4 DISCOVERY LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Variables STM32F4 DISCOVERY LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED4_GPIO_PORT, - LED3_GPIO_PORT, - LED5_GPIO_PORT, - LED6_GPIO_PORT}; -const uint16_t GPIO_PIN[LEDn] = {LED4_PIN, - LED3_PIN, - LED5_PIN, - LED6_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn}; - -uint32_t I2cxTimeout = I2Cx_TIMEOUT_MAX; /* 0x01) - { - WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD; - } - /* Set chip select Low at the start of the transmission */ - ACCELERO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(WriteAddr); - - /* Send the data that will be written into the device (MSB First) */ - while(NumByteToWrite >= 0x01) - { - SPIx_WriteRead(*pBuffer); - NumByteToWrite--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - ACCELERO_CS_HIGH(); -} - -/** - * @brief Reads a block of data from the Accelerometer. - * @param pBuffer: pointer to the buffer that receives the data read from the Accelerometer. - * @param ReadAddr: Accelerometer's internal address to read from. - * @param NumByteToRead: number of bytes to read from the Accelerometer. - */ -void ACCELERO_IO_Read(uint8_t *pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) -{ - if(NumByteToRead > 0x01) - { - ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD); - } - else - { - ReadAddr |= (uint8_t)READWRITE_CMD; - } - /* Set chip select Low at the start of the transmission */ - ACCELERO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(ReadAddr); - - /* Receive the data that will be read from the device (MSB First) */ - while(NumByteToRead > 0x00) - { - /* Send dummy byte (0x00) to generate the SPI clock to ACCELEROMETER (Slave device) */ - *pBuffer = SPIx_WriteRead(DUMMY_BYTE); - NumByteToRead--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - ACCELERO_CS_HIGH(); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable Reset GPIO Clock */ - AUDIO_RESET_GPIO_CLK_ENABLE(); - - /* Audio reset pin configuration */ - GPIO_InitStruct.Pin = AUDIO_RESET_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(AUDIO_RESET_GPIO, &GPIO_InitStruct); - - I2Cx_Init(); - - /* Power Down the codec */ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_PIN_RESET); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); - - /* Power on the codec */ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_PIN_SET); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write (uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_WriteData(Addr, Reg, Value); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t AUDIO_IO_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_ReadData(Addr, Reg); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.h b/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.h deleted file mode 100644 index 26b091ff69..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery.h +++ /dev/null @@ -1,282 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32F4-Discovery Kit's Leds and - * push-button hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4_DISCOVERY_H -#define __STM32F4_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Exported_Types STM32F4 DISCOVERY LOW LEVEL_Exported_Types - * @{ - */ -typedef enum -{ - LED4 = 0, - LED3 = 1, - LED5 = 2, - LED6 = 3 -} Led_TypeDef; - -typedef enum -{ - BUTTON_KEY = 0, -} Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -} ButtonMode_TypeDef; -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Exported_Constants STM32F4 DISCOVERY LOW LEVEL Exported Constants - * @{ - */ - -/** -* @brief Define for STM32F4_DISCOVERY board -*/ -#if !defined (USE_STM32F4_DISCO) - #define USE_STM32F4_DISCO -#endif - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_LED STM32F4 DISCOVERY LOW LEVEL LED - * @{ - */ -#define LEDn 4 - -#define LED4_PIN GPIO_PIN_12 -#define LED4_GPIO_PORT GPIOD -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LED3_PIN GPIO_PIN_13 -#define LED3_GPIO_PORT GPIOD -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LED5_PIN GPIO_PIN_14 -#define LED5_GPIO_PORT GPIOD -#define LED5_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED5_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LED6_PIN GPIO_PIN_15 -#define LED6_GPIO_PORT GPIOD -#define LED6_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED6_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_ENABLE(); \ - }while(0) - -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_BUTTON STM32F4 DISCOVERY LOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Wakeup push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_0 -#define KEY_BUTTON_GPIO_PORT GPIOA -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI0_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) - -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_BUS STM32F4 DISCOVERY LOW LEVEL BUS - * @{ - */ - -/*############################### SPI1 #######################################*/ -#define DISCOVERY_SPIx SPI1 -#define DISCOVERY_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() -#define DISCOVERY_SPIx_GPIO_PORT GPIOA /* GPIOA */ -#define DISCOVERY_SPIx_AF GPIO_AF5_SPI1 -#define DISCOVERY_SPIx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define DISCOVERY_SPIx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define DISCOVERY_SPIx_SCK_PIN GPIO_PIN_5 /* PA.05 */ -#define DISCOVERY_SPIx_MISO_PIN GPIO_PIN_6 /* PA.06 */ -#define DISCOVERY_SPIx_MOSI_PIN GPIO_PIN_7 /* PA.07 */ - -/* Maximum Timeout values for flags waiting loops. These timeouts are not based - on accurate values, they just guarantee that the application will not remain - stuck if the SPI communication is corrupted. - You may modify these timeout values depending on CPU frequency and application - conditions (interrupts routines ...). */ -#define SPIx_TIMEOUT_MAX 0x1000 /*Init(ctrl); - - /* MEMS High Pass Filter configuration */ - lis302dl_filter.HighPassFilter_Data_Selection = LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER; - lis302dl_filter.HighPassFilter_CutOff_Frequency = LIS302DL_HIGHPASSFILTER_LEVEL_1; - lis302dl_filter.HighPassFilter_Interrupt = LIS302DL_HIGHPASSFILTERINTERRUPT_1_2; - - /* Configure MEMS high pass filter cut-off level, interrupt and data selection bits */ - ctrl = (uint8_t)(lis302dl_filter.HighPassFilter_Data_Selection | \ - lis302dl_filter.HighPassFilter_CutOff_Frequency | \ - lis302dl_filter.HighPassFilter_Interrupt); - - /* Configure the accelerometer LPF main parameters */ - AcceleroDrv->FilterConfig(ctrl); - - ret = ACCELERO_OK; - } - else if(Lis3dshDrv.ReadID() == I_AM_LIS3DSH) - { - /* Initialize the accelerometer driver structure */ - AcceleroDrv = &Lis3dshDrv; - - /* Set configuration of LIS3DSH MEMS Accelerometer **********************/ - l1s3dsh_InitStruct.Output_DataRate = LIS3DSH_DATARATE_100; - l1s3dsh_InitStruct.Axes_Enable = LIS3DSH_XYZ_ENABLE; - l1s3dsh_InitStruct.SPI_Wire = LIS3DSH_SERIALINTERFACE_4WIRE; - l1s3dsh_InitStruct.Self_Test = LIS3DSH_SELFTEST_NORMAL; - l1s3dsh_InitStruct.Full_Scale = LIS3DSH_FULLSCALE_2; - l1s3dsh_InitStruct.Filter_BW = LIS3DSH_FILTER_BW_800; - - /* Configure MEMS: power mode(ODR) and axes enable */ - ctrl = (uint16_t) (l1s3dsh_InitStruct.Output_DataRate | \ - l1s3dsh_InitStruct.Axes_Enable); - - /* Configure MEMS: full scale and self test */ - ctrl |= (uint16_t) ((l1s3dsh_InitStruct.SPI_Wire | \ - l1s3dsh_InitStruct.Self_Test | \ - l1s3dsh_InitStruct.Full_Scale | \ - l1s3dsh_InitStruct.Filter_BW) << 8); - - /* Configure the accelerometer main parameters */ - AcceleroDrv->Init(ctrl); - - ret = ACCELERO_OK; - } - - else - { - ret = ACCELERO_ERROR; - } - return ret; -} - -/** - * @brief Read ID of Accelerometer component. - * @retval ID - */ -uint8_t BSP_ACCELERO_ReadID(void) -{ - uint8_t id = 0x00; - - if(AcceleroDrv->ReadID != NULL) - { - id = AcceleroDrv->ReadID(); - } - return id; -} - -/** - * @brief Reboot memory content of Accelerometer. - */ -void BSP_ACCELERO_Reset(void) -{ - if(AcceleroDrv->Reset != NULL) - { - AcceleroDrv->Reset(); - } -} - -/** - * @brief Configure Accelerometer click IT. - */ -void BSP_ACCELERO_Click_ITConfig(void) -{ - if(AcceleroDrv->ConfigIT != NULL) - { - AcceleroDrv->ConfigIT(); - } -} - -/** - * @brief Clear Accelerometer click IT. - */ -void BSP_ACCELERO_Click_ITClear(void) -{ - if(AcceleroDrv->ClearIT != NULL) - { - AcceleroDrv->ClearIT(); - } -} - -/** - * @brief Get XYZ axes acceleration. - * @param pDataXYZ: Pointer to 3 angular acceleration axes. - * pDataXYZ[0] = X axis, pDataXYZ[1] = Y axis, pDataXYZ[2] = Z axis - */ -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ) -{ - int16_t SwitchXY = 0; - - if(AcceleroDrv->GetXYZ != NULL) - { - AcceleroDrv->GetXYZ(pDataXYZ); - - /* Switch X and Y Axes in case of LIS302DL MEMS */ - if(AcceleroDrv == &Lis302dlDrv) - { - SwitchXY = pDataXYZ[0]; - pDataXYZ[0] = pDataXYZ[1]; - /* Invert Y Axis to be compliant with LIS3DSH MEMS */ - pDataXYZ[1] = -SwitchXY; - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_accelerometer.h b/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_accelerometer.h deleted file mode 100644 index 68a5a8670a..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_accelerometer.h +++ /dev/null @@ -1,91 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4_discovery_accelerometer.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f4_discovery_accelerometer.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4_DISCOVERY_ACCELEROMETER_H -#define __STM32F4_DISCOVERY_ACCELEROMETER_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4_discovery.h" - -/* Include Accelerometer component drivers */ -#include "../Components/lis302dl/lis302dl.h" -#include "../Components/lis3dsh/lis3dsh.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY_ACCELEROMETER - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_ACCELEROMETER_Exported_Types STM32F4 DISCOVERY ACCELEROMETER Exported Types - * @{ - */ -typedef enum -{ - ACCELERO_OK = 0, - ACCELERO_ERROR = 1, - ACCELERO_TIMEOUT = 2 -}ACCELERO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_ACCELEROMETER_Exported_Functions STM32F4 DISCOVERY ACCELEROMETER Exported Functions - * @{ - */ -/* Accelerometer functions */ -uint8_t BSP_ACCELERO_Init(void); -uint8_t BSP_ACCELERO_ReadID(void); -void BSP_ACCELERO_Reset(void); -void BSP_ACCELERO_Click_ITConfig(void); -void BSP_ACCELERO_Click_ITClear(void); -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4_DISCOVERY_ACCELEROMETER_H */ diff --git a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.c b/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.c deleted file mode 100644 index 6f1814308c..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.c +++ /dev/null @@ -1,1121 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4_discovery_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32F4-Discovery - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES -1. How To use this driver: --------------------------- - - This driver supports STM32F4xx devices on STM32F4-Discovery Kit: - a) to play an audio file (all functions names start by BSP_AUDIO_OUT_xxx) - b) to record an audio file through MP45DT02, ST MEMS (all functions names start by AUDIO_IN_xxx) - -a) PLAY A FILE: -============== - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or - OUTPUT_DEVICE_BOTH) - Volume: initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - If the returned value is different from 0 or the function is stuck then the communication with - the codec (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented - into the audio jack on the discovery board). When the Headphone is connected it is used - as output. When the headphone is disconnected from the audio jack, the output is - automatically switched to Speaker. - - OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size: size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named BSP_AUDIO_OUT_XXXCallBack() and only their prototypes are declared in - the stm32f4_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency or to mute, use the functions - BSP_AUDIO_OUT_Stop(), BSP_AUDIO_OUT_SetVolume(), AUDIO_OUT_SetFrequency() BSP_AUDIO_OUT_SetOutputMode and BSP_AUDIO_OUT_SetMute(). - + The driver API and the callback functions are at the end of the stm32f4_discovery_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm32f4_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32f4_discovery_audio.c file (I2S3_Init()...) - -Known Limitations: -------------------- - 1- When using the Speaker, if the audio file quality is not high enough, the speaker output - may produce high and uncomfortable noise level. To avoid this issue, to use speaker - output properly, try to increase audio file sampling rate (typically higher than 48KHz). - This operation will lead to larger file size. - 2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some - user interrupt routines (in this case, interrupts could be disabled just before the start of - communication then re-enabled when it is over). Note that this communication is only done at - the configuration phase (BSP_AUDIO_OUT_Init() or BSP_AUDIO_OUT_Stop()) and when Volume control modification is - performed (BSP_AUDIO_OUT_SetVolume() or BSP_AUDIO_OUT_SetMute()or BSP_AUDIO_OUT_SetOutputMode()). - When the audio data is played, no communication is required with the audio codec. - 3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 4- Supports only Stereo audio streaming. To play mono audio streams, each data should be sent twice - on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing. - 5- Supports only 16-bits audio data size. - -b) RECORD A FILE: -================ - + Call the function BSP_AUDIO_IN_Init( - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - ) - This function configures all the hardware required for the audio application (I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - - + Call the function BSP_AUDIO_IN_Record( - pbuf Main buffer pointer for the recorded data storing - size Current size of the recorded buffer - ) - to start recording from the microphone. - - + User needs to implement user callbacks to retrieve data saved in the record buffer - (AUDIO_IN_RxHalfCpltCallback/BSP_AUDIO_IN_ReceiveComplete_CallBack) - - + Call the function AUDIO_IN_STOP() to stop recording - -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO STM32F4 DISCOVERY AUDIO - * @brief This file includes the low layer audio driver available on STM32F4-Discovery - * discovery board. - * @{ - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Private_Types STM32F4 DISCOVERY AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Private_Defines STM32F4 DISCOVERY AUDIO Private Defines - * @{ - */ -/* These PLL parameters are valid when the f(VCO clock) = 1Mhz */ -const uint32_t I2SFreq[8] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000}; -const uint32_t I2SPLLN[8] = {256, 429, 213, 429, 426, 271, 258, 344}; -const uint32_t I2SPLLR[8] = {5, 4, 4, 4, 4, 6, 3, 1}; -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Private_Macros STM32F4 DISCOVERY AUDIO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Private_Variables STM32F4 DISCOVERY AUDIO Private Variables - * @{ - */ -/*##### PLAY #####*/ -static AUDIO_DrvTypeDef *pAudioDrv; -I2S_HandleTypeDef hAudioOutI2s; - -/*### RECORDER ###*/ -I2S_HandleTypeDef hAudioInI2s; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -__IO uint16_t AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Private_Function_Prototypes STM32F4 DISCOVERY AUDIO Private Function Prototypes - * @{ - */ -static uint8_t I2S3_Init(uint32_t AudioFreq); -static uint8_t I2S2_Init(uint32_t AudioFreq); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_OUT_Private_Functions STM32F4 DISCOVERY AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_OK; - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&hAudioOutI2s, AudioFreq, NULL); - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - hAudioOutI2s.Instance = I2S3; - if(HAL_I2S_GetState(&hAudioOutI2s) == HAL_I2S_STATE_RESET) - { - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&hAudioOutI2s, NULL); - } - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - /* Configure the I2S peripheral */ - if(I2S3_Init(AudioFreq) != AUDIO_OK) - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Retrieve audio codec identifier */ - if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID) - { - /* Initialize the audio driver structure */ - pAudioDrv = &cs43l22_drv; - } - else - { - ret = AUDIO_ERROR; - } - } - - if(ret == AUDIO_OK) - { - pAudioDrv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(pAudioDrv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size/AUDIODATA_SIZE)); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: Pointer to data address - * @param Size: Number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pData, Size); -} - -/** - * @brief Pauses the audio file stream. In case of using DMA, the DMA Pause - * feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only the - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Resumes the audio file streaming. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer resume function */ - HAL_I2S_DMAResume(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call DMA Stop to disable DMA stream before stopping codec */ - HAL_I2S_DMAStop(&hAudioOutI2s); - - /* Call Audio Codec Stop function */ - if(pAudioDrv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 1ms */ - HAL_Delay(1); - - /* Reset the pin */ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_PIN_RESET); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(pAudioDrv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(pAudioDrv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @note This function modifies a global variable of the audio codec driver: OutputDev. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output Device function */ - if(pAudioDrv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Update the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&hAudioOutI2s, AudioFreq, NULL); - - /* Update the I2S audio frequency configuration */ - I2S3_Init(AudioFreq); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Call the user function which will manage directly transfer complete */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); - } -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Manage the remaining file size and new address offset: This function should - be coded by user (its prototype is already declared in stm32f4_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); - } -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rccclkinit; - uint8_t index = 0, freqindex = 0xFF; - - for(index = 0; index < 8; index++) - { - if(I2SFreq[index] == AudioFreq) - { - freqindex = index; - } - } - /* Enable PLLI2S clock */ - HAL_RCCEx_GetPeriphCLKConfig(&rccclkinit); - /* PLLI2S_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - if ((freqindex & 0x7) == 0) - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = I2SPLLN[freqindex]; - rccclkinit.PLLI2S.PLLI2SR = I2SPLLR[freqindex]; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } - else - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = 258; - rccclkinit.PLLI2S.PLLI2SR = 3; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } -} - -/** - * @brief AUDIO OUT I2S MSP Init. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2sTx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable I2S3 clock */ - I2S3_CLK_ENABLE(); - - /*** Configure the GPIOs ***/ - /* Enable I2S GPIO clocks */ - I2S3_SCK_SD_CLK_ENABLE(); - I2S3_WS_CLK_ENABLE(); - - /* I2S3 pins configuration: WS, SCK and SD pins ----------------------------*/ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = I2S3_SCK_SD_WS_AF; - HAL_GPIO_Init(I2S3_SCK_SD_GPIO_PORT, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = I2S3_WS_PIN ; - HAL_GPIO_Init(I2S3_WS_GPIO_PORT, &GPIO_InitStruct); - - /* I2S3 pins configuration: MCK pin */ - I2S3_MCK_CLK_ENABLE(); - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_Init(I2S3_MCK_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the I2S DMA clock */ - I2S3_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == I2S3) - { - /* Configure the hdma_i2sTx handle parameters */ - hdma_i2sTx.Init.Channel = I2S3_DMAx_CHANNEL; - hdma_i2sTx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2sTx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sTx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sTx.Init.PeriphDataAlignment = I2S3_DMAx_PERIPH_DATA_SIZE; - hdma_i2sTx.Init.MemDataAlignment = I2S3_DMAx_MEM_DATA_SIZE; - hdma_i2sTx.Init.Mode = DMA_NORMAL; - hdma_i2sTx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_i2sTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sTx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sTx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_i2sTx.Instance = I2S3_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2sTx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sTx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sTx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S3_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S3_DMAx_IRQ); -} - -/** - * @brief De-Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S3_DMAx_IRQ); - - if(hi2s->Instance == I2S3) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmatx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* CODEC_I2S pins configuration: SCK and SD pins */ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - HAL_GPIO_DeInit(I2S3_SCK_SD_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: WS pin */ - GPIO_InitStruct.Pin = I2S3_WS_PIN; - HAL_GPIO_DeInit(I2S3_WS_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: MCK pin */ - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_DeInit(I2S3_MCK_GPIO_PORT, GPIO_InitStruct.Pin); - - /* Disable I2S clock */ - I2S3_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (I2S). - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S3_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioOutI2s Instance parameter */ - hAudioOutI2s.Instance = I2S3; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioOutI2s); - - /* I2S3 peripheral configuration */ - hAudioOutI2s.Init.AudioFreq = AudioFreq; - hAudioOutI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioOutI2s.Init.CPOL = I2S_CPOL_LOW; - hAudioOutI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioOutI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - hAudioOutI2s.Init.Mode = I2S_MODE_MASTER_TX; - hAudioOutI2s.Init.Standard = I2S_STANDARD; - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioOutI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} - -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_IN_Private_Functions STM32F4 DISCOVERY AUDIO IN Private Functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - - /* Configure PLL clock */ - BSP_AUDIO_IN_ClockConfig(&hAudioInI2s, AudioFreq, NULL); - - /* Configure the PDM library */ - /* On STM32F4-Discovery a single microphone is mounted, samples are duplicated - to make stereo audio streams */ - PDMDecoder_Init(AudioFreq, ChnlNbr, 2); - - /* Configure the I2S peripheral */ - hAudioInI2s.Instance = I2S2; - if(HAL_I2S_GetState(&hAudioInI2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&hAudioInI2s, NULL); - } - - /* Configure the I2S2 */ - I2S2_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&hAudioInI2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAStop(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf) -{ - uint16_t AppPDM[INTERNAL_BUFF_SIZE/2]; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; indexInstance == I2S2) - { - /* Configure the hdma_i2sRx handle parameters */ - hdma_i2sRx.Init.Channel = I2S2_DMAx_CHANNEL; - hdma_i2sRx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2sRx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sRx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sRx.Init.PeriphDataAlignment = I2S2_DMAx_PERIPH_DATA_SIZE; - hdma_i2sRx.Init.MemDataAlignment = I2S2_DMAx_MEM_DATA_SIZE; - hdma_i2sRx.Init.Mode = DMA_CIRCULAR; - hdma_i2sRx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sRx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2sRx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sRx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sRx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2sRx.Instance = I2S2_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2sRx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sRx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sRx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S2_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S2_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S2_DMAx_IRQ); - - if(hi2s->Instance == I2S2) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = I2S2_SCK_PIN; - HAL_GPIO_DeInit(I2S2_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = I2S2_MOSI_PIN; - HAL_GPIO_DeInit(I2S2_MOSI_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - I2S2_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S2_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - hAudioInI2s.Instance = I2S2; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioInI2s); - - /* I2S2 peripheral configuration */ - hAudioInI2s.Init.AudioFreq = 2 * AudioFreq; - hAudioInI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioInI2s.Init.CPOL = I2S_CPOL_HIGH; - hAudioInI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioInI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - hAudioInI2s.Init.Mode = I2S_MODE_MASTER_RX; - hAudioInI2s.Init.Standard = I2S_STANDARD_LSB; - - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioInI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} - -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_IN_OUT_Private_Functions STM32F4 DISCOVERY AUDIO IN OUT Private Functions - * @{ - */ - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32f4_discovery_audio.h) */ - if(hi2s->Instance == I2S3) - { - BSP_AUDIO_OUT_Error_CallBack(); - } - if(hi2s->Instance == I2S2) - { - BSP_AUDIO_IN_Error_Callback(); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.h b/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.h deleted file mode 100644 index 015991a087..0000000000 --- a/Drivers/BSP/STM32F4-Discovery/stm32f4_discovery_audio.h +++ /dev/null @@ -1,255 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4_discovery_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * stm32f4_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4_DISCOVERY_AUDIO_H -#define __STM32F4_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/cs43l22/cs43l22.h" - -#include "stm32f4_discovery.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F4_DISCOVERY_AUDIO - * @{ - */ - - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Types STM32F4 DISCOVERY AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_OUT_Exported_Constants STM32F4 DISCOVERY AUDIO OUT Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - AUDIO OUT CONFIGURATION -------------------------------------------------------------------------------*/ - -/* I2S peripheral configuration defines */ -#define I2S3 SPI3 -#define I2S3_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define I2S3_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define I2S3_SCK_SD_WS_AF GPIO_AF6_SPI3 -#define I2S3_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_WS_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define I2S3_WS_PIN GPIO_PIN_4 -#define I2S3_SCK_PIN GPIO_PIN_10 -#define I2S3_SD_PIN GPIO_PIN_12 -#define I2S3_MCK_PIN GPIO_PIN_7 -#define I2S3_SCK_SD_GPIO_PORT GPIOC -#define I2S3_WS_GPIO_PORT GPIOA -#define I2S3_MCK_GPIO_PORT GPIOC - -/* I2S DMA Stream definitions */ -#define I2S3_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S3_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S3_DMAx_STREAM DMA1_Stream7 -#define I2S3_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S3_DMAx_IRQ DMA1_Stream7_IRQn -#define I2S3_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S3_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define I2S3_IRQHandler DMA1_Stream7_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 0x0E /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define I2S2 SPI2 -#define I2S2_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() -#define I2S2_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() -#define I2S2_SCK_PIN GPIO_PIN_10 -#define I2S2_SCK_GPIO_PORT GPIOB -#define I2S2_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define I2S2_SCK_AF GPIO_AF5_SPI2 - -#define I2S2_MOSI_PIN GPIO_PIN_3 -#define I2S2_MOSI_GPIO_PORT GPIOC -#define I2S2_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S2_MOSI_AF GPIO_AF5_SPI2 - -/* I2S DMA Stream Rx definitions */ -#define I2S2_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S2_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S2_DMAx_STREAM DMA1_Stream3 -#define I2S2_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S2_DMAx_IRQ DMA1_Stream3_IRQn -#define I2S2_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S2_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define I2S2_IRQHandler DMA1_Stream3_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK 0 -#define AUDIO_ERROR 1 -#define AUDIO_TIMEOUT 2 - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION 16 -#define DEFAULT_AUDIO_IN_CHANNEL_NBR 1 /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME 64 - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR -/* PCM buffer output size */ -#define PCM_OUT_SIZE DEFAULT_AUDIO_IN_FREQ/1000 -#define CHANNEL_DEMUX_MASK 0x55 - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Variables STM32F4 DISCOVERY AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Macros STM32F4 DISCOVERY AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE) -#define HTONS(A) ((((uint16_t)(A) & 0xff00) >> 8) | (((uint16_t)(A) & 0x00ff) << 8)) -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_OUT_Exported_Functions STM32F4 DISCOVERY AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred. */ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** @defgroup STM32F4_DISCOVERY_AUDIO_IN_Exported_Functions STM32F4 DISCOVERY AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32F401-Discovery b/Drivers/BSP/STM32F401-Discovery new file mode 160000 index 0000000000..7a797af08d --- /dev/null +++ b/Drivers/BSP/STM32F401-Discovery @@ -0,0 +1 @@ +Subproject commit 7a797af08db92b7638865ddd8c61a5449c93a5a5 diff --git a/Drivers/BSP/STM32F401-Discovery/LICENSE.md b/Drivers/BSP/STM32F401-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F401-Discovery/README.md b/Drivers/BSP/STM32F401-Discovery/README.md deleted file mode 100644 index 065f268f4e..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# BSP STM32F401-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f401-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f401-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F401-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f401-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22) -* [stm32-l3gd20](https://github.com/STMicroelectronics/stm32-l3gd20) -* [stm32-lsm303dlhc](https://github.com/STMicroelectronics/stm32-lsm303dlhc) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F401-Discovery/Release_Notes.html b/Drivers/BSP/STM32F401-Discovery/Release_Notes.html deleted file mode 100644 index 2e7d24e5a4..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/Release_Notes.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - Release Notes for STM32F401-Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F401-Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F401-Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32f401_discovery_audio.c/.h: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • Note -
      -
    • This version must be used with v3.0.0 of PDM library
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Replace __PPP_CLK_ENABLE/DISABLE with __HAL_RCC_PPP_ENABLE/DISABLE
  • -
  • Add BSP_AUDIO_OUT_ClockConfig, BSP_AUDIO_OUT_MspInit and BSP_AUDIO_OUT_MspDeInit as weak functions
  • -
  • Add BSP_AUDIO_IN_ClockConfig, BSP_AUDIO_IN_MspInit and BSP_AUDIO_IN_MspDeInit as weak functions
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F401-Discovery_BSP_User_Manual.chm file
  • -
  • stm32f401_discovery_audio.c -
      -
    • BSP_AUDIO_OUT_Init() update to configure correctly the PLL I2S parameters
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f401_discovery.c -
      -
    • Add AUDIO_IO_DeInit() function to align with BSP Components Common drivers V4.0.0
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f401_discovery.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE() .
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f401_discovery_accelerometer.h, stm32f401_discovery_audio.h and stm32f401_discovery_gyroscope.h: -
      -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f401_discovery_audio.c/.h -
      -
    • BSP_AUDIO_OUT_Play(): uses the buffer size in byte instead of half-word
    • -
    • BSP_AUDIO_IN_PDMToPCM(): duplicates samples to make stereo audio stream (since a single microphone in mounted on STM32F401-Discovery)
    • -
    • I2S2_Init(): configures the I2S to clock the microphone at 1.024 MHz as required instead of 2.048MHz
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f401_discovery.c/.h -
      -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
  • -
  • stm32f401_discovery_audio.c/.h -
      -
    • Add note that only the audio stereo format is supported
    • -
  • -
  • stm32f401_discovery_gyroscope.c/.h -
      -
    • Update BSP_GYRO_Init() to support new L3GD20 device ID (I_AM_L3GD20_TR)
    • -
  • -
  • Comments clean up and typo corrections
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V1.0.1, and thus the 2 versions are not compatible.
  • -
  • This version has to be used only with STM32CubeF4 based development
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery_l3gd20.c : Set SPI baudrate to 5.25 MHz to fit Gyroscope timing characteristics (Gyroscope l3gd20 SPI interface max baud rate is 10MHz for write/read)
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official version of the STM32F401-Discovery Board Drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F401-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32F401-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F401-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F401-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F401-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F401-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F401-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F401-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.c b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.c deleted file mode 100644 index 3d174d3965..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.c +++ /dev/null @@ -1,727 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage LEDs and - * push-button available on STM32F401-Discovery Kit from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f401_discovery.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY STM32F401 DISCOVERY - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL STM32F401 DISCOVERY LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F401-Discovery Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32F401 DISCOVERY LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Private_Defines STM32F401 DISCOVERY LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32F401 DISCO BSP Driver version number V2.2.5 - */ -#define __STM32F401_DISCO_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32F401_DISCO_BSP_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */ -#define __STM32F401_DISCO_BSP_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */ -#define __STM32F401_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F401_DISCO_BSP_VERSION ((__STM32F401_DISCO_BSP_VERSION_MAIN << 24)\ - |(__STM32F401_DISCO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F401_DISCO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F401_DISCO_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Private_Macros STM32F401 DISCOVERY LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Private_Variables STM32F401 DISCOVERY LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED4_GPIO_PORT, - LED3_GPIO_PORT, - LED5_GPIO_PORT, - LED6_GPIO_PORT}; - -const uint16_t GPIO_PIN[LEDn] = {LED4_PIN, - LED3_PIN, - LED5_PIN, - LED6_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn}; - -uint32_t I2cxTimeout = I2Cx_TIMEOUT_MAX; /* 0x01) - { - WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD; - } - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(WriteAddr); - - /* Send the data that will be written into the device (MSB First) */ - while(NumByteToWrite >= 0x01) - { - SPIx_WriteRead(*pBuffer); - NumByteToWrite--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - -/** - * @brief Reads a block of data from the GYRO. - * @param pBuffer: pointer to the buffer that receives the data read from the GYRO. - * @param ReadAddr: GYRO's internal address to read from. - * @param NumByteToRead: Number of bytes to read from the GYRO. - */ -void GYRO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) -{ - if(NumByteToRead > 0x01) - { - ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD); - } - else - { - ReadAddr |= (uint8_t)READWRITE_CMD; - } - - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(ReadAddr); - - /* Receive the data that will be read from the device (MSB First) */ - while(NumByteToRead > 0x00) - { - /* Send dummy byte (0x00) to generate the SPI clock to GYRO (Slave device) */ - *pBuffer = SPIx_WriteRead(DUMMY_BYTE); - NumByteToRead--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable Reset GPIO Clock */ - AUDIO_RESET_GPIO_CLK_ENABLE(); - - /* Audio reset pin configuration -------------------------------------------*/ - GPIO_InitStruct.Pin = AUDIO_RESET_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(AUDIO_RESET_GPIO, &GPIO_InitStruct); - - I2Cx_Init(); - - /* Power Down the codec */ - CODEC_AUDIO_POWER_OFF(); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); - - /* Power on the codec */ - CODEC_AUDIO_POWER_ON(); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write (uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_WriteData(Addr, Reg, Value); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t AUDIO_IO_Read (uint8_t Addr, uint8_t Reg) -{ - return I2Cx_ReadData(Addr, Reg); -} - -/****************************** LINK ACCELEROMETER ****************************/ - -/** - * @brief Configures COMPASS / ACCELERO I2C interface. - */ -void COMPASSACCELERO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable DRDY clock */ - ACCELERO_DRDY_GPIO_CLK_ENABLE(); - - /* MEMS DRDY pin configuration */ - GPIO_InitStructure.Pin = ACCELERO_DRDY_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_INPUT; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(ACCELERO_DRDY_GPIO_PORT, &GPIO_InitStructure); - - I2Cx_Init(); -} - -/** - * @brief Configures COMPASS / ACCELERO click IT. - */ -void COMPASSACCELERO_IO_ITConfig(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable INT1 and INT2 GPIO clock */ - ACCELERO_INT_GPIO_CLK_ENABLE(); - - /* Configure GPIO PINs to detect Interrupts */ - GPIO_InitStructure.Pin = ACCELERO_INT1_PIN | ACCELERO_INT2_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - GPIO_InitStructure.Pull = GPIO_NOPULL; - HAL_GPIO_Init(ACCELERO_INT_GPIO_PORT, &GPIO_InitStructure); - - /* Enable and set COMPASS / ACCELERO Interrupt to the highest priority */ - HAL_NVIC_SetPriority(ACCELERO_INT1_EXTI_IRQn, 0x00, 0x00); - HAL_NVIC_EnableIRQ(ACCELERO_INT1_EXTI_IRQn); -} - -/** - * @brief Writes one byte to the COMPASS / ACCELERO. - * @param DeviceAddr: the slave address to be programmed - * @param RegisterAddr: the COMPASS / ACCELERO register to be written - * @param Value: Data to be written - */ -void COMPASSACCELERO_IO_Write(uint16_t DeviceAddr, uint8_t RegisterAddr, uint8_t Value) -{ - /* Call I2Cx Read data bus function */ - I2Cx_WriteData(DeviceAddr, RegisterAddr, Value); -} - -/** - * @brief Reads a block of data from the COMPASS / ACCELERO. - * @param DeviceAddr: the slave address to be programmed(ACC_I2C_ADDRESS or MAG_I2C_ADDRESS). - * @param RegisterAddr: the COMPASS / ACCELERO internal address register to read from - * @retval COMPASS / ACCELERO register value - */ -uint8_t COMPASSACCELERO_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr) -{ - /* Call I2Cx Read data bus function */ - return I2Cx_ReadData(DeviceAddr, RegisterAddr); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.h b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.h deleted file mode 100644 index 91dc671038..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery.h +++ /dev/null @@ -1,292 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32F401-Discovery Kit's Leds and - * push-button hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F401_DISCOVERY_H -#define __STM32F401_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Exported_Types STM32F401 DISCOVERY LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED4 = 0, - LED3 = 1, - LED5 = 2, - LED6 = 3 -}Led_TypeDef; - -typedef enum -{ - BUTTON_KEY = 0, -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_Exported_Constants STM32F401 DISCOVERY LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F401_DISCOVERY board - */ -#if !defined (USE_STM32F401_DISCO) - #define USE_STM32F401_DISCO -#endif - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_LED STM32F401 DISCOVERY LOW LEVEL LED - * @{ - */ -#define LEDn 4 - -#define LED4_PIN GPIO_PIN_12 -#define LED4_GPIO_PORT GPIOD -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED3_PIN GPIO_PIN_13 -#define LED3_GPIO_PORT GPIOD -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED5_PIN GPIO_PIN_14 -#define LED5_GPIO_PORT GPIOD -#define LED5_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED5_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED6_PIN GPIO_PIN_15 -#define LED6_GPIO_PORT GPIOD -#define LED6_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED6_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_ENABLE(); \ - }while(0) - -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_BUTTON STM32F401 DISCOVERY LOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Wakeup push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_0 -#define KEY_BUTTON_GPIO_PORT GPIOA -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI0_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_LOW_LEVEL_BUS STM32F401 DISCOVERY LOW LEVEL BUS - * @{ - */ - -/*############################### I2Cx #######################################*/ -#define DISCOVERY_I2Cx I2C1 -#define DISCOVERY_I2Cx_CLOCK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define DISCOVERY_I2Cx_GPIO_PORT GPIOB /* GPIOB */ -#define DISCOVERY_I2Cx_SCL_PIN GPIO_PIN_6 /* PB.06 */ -#define DISCOVERY_I2Cx_SDA_PIN GPIO_PIN_9 /* PB.09 */ -#define DISCOVERY_I2Cx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define DISCOVERY_I2Cx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define DISCOVERY_I2Cx_AF GPIO_AF4_I2C1 - -#define DISCOVERY_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define DISCOVERY_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/* I2C interrupt requests */ -#define DISCOVERY_I2Cx_EV_IRQn I2C1_EV_IRQn -#define DISCOVERY_I2Cx_ER_IRQn I2C1_ER_IRQn - -/* I2C speed and timeout max */ -#define I2Cx_TIMEOUT_MAX 0xA000 /*Init(ctrl); - - /* Fill the Accelerometer LPF structure */ - LSM303DLHC_FilterStructure.HighPassFilter_Mode_Selection =LSM303DLHC_HPM_NORMAL_MODE; - LSM303DLHC_FilterStructure.HighPassFilter_CutOff_Frequency = LSM303DLHC_HPFCF_16; - LSM303DLHC_FilterStructure.HighPassFilter_AOI1 = LSM303DLHC_HPF_AOI1_DISABLE; - LSM303DLHC_FilterStructure.HighPassFilter_AOI2 = LSM303DLHC_HPF_AOI2_DISABLE; - - /* Configure MEMS: mode, cutoff frquency, Filter status, Click, AOI1 and AOI2 */ - ctrl = (uint8_t) (LSM303DLHC_FilterStructure.HighPassFilter_Mode_Selection |\ - LSM303DLHC_FilterStructure.HighPassFilter_CutOff_Frequency|\ - LSM303DLHC_FilterStructure.HighPassFilter_AOI1|\ - LSM303DLHC_FilterStructure.HighPassFilter_AOI2); - - /* Configure the Accelerometer LPF main parameters */ - AccelerometerDrv->FilterConfig(ctrl); - - ret = ACCELERO_OK; - } - else - { - ret = ACCELERO_ERROR; - } - - return ret; -} - -/** - * @brief Reboot memory content of Accelerometer. - */ -void BSP_ACCELERO_Reset(void) -{ - if(AccelerometerDrv->Reset != NULL) - { - AccelerometerDrv->Reset(); - } -} - -/** - * @brief Configure Accelerometer click IT. - */ -void BSP_ACCELERO_Click_ITConfig(void) -{ - if(AccelerometerDrv->ConfigIT!= NULL) - { - AccelerometerDrv->ConfigIT(); - } -} - -/** - * @brief Get XYZ axes acceleration. - * @param pDataXYZ: Pointer to 3 angular acceleration axes. - * pDataXYZ[0] = X axis, pDataXYZ[1] = Y axis, pDataXYZ[2] = Z axis - */ -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ) -{ - int16_t SwitchXY = 0; - - if(AccelerometerDrv->GetXYZ!= NULL) - { - AccelerometerDrv->GetXYZ(pDataXYZ); - - /* Switch X and Y Axes in case of LSM303DLHC MEMS */ - if(AccelerometerDrv == &Lsm303dlhcDrv) - { - SwitchXY = pDataXYZ[0]; - pDataXYZ[0] = pDataXYZ[1]; - - /* Invert Y Axis to be conpliant with LIS3DSH */ - pDataXYZ[1] = -SwitchXY; - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_accelerometer.h b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_accelerometer.h deleted file mode 100644 index 74c128b913..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_accelerometer.h +++ /dev/null @@ -1,97 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery_accelerometer.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f401_discovery_accelerometer.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F401_DISCOVERY_ACCELEROMETER_H -#define __STM32F401_DISCOVERY_ACCELEROMETER_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f401_discovery.h" - -/* Include Accelerometer component driver */ -#include "../Components/lsm303dlhc/lsm303dlhc.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY_ACCELEROMETER - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_ACCELEROMETER_Exported_Types STM32F401 DISCOVERY ACCELEROMETER Exported Types - * @{ - */ -typedef enum -{ - ACCELERO_OK = 0, - ACCELERO_ERROR = 1, - ACCELERO_TIMEOUT = 2 -}ACCELERO_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_ACCELEROMETER_Exported_Constants STM32F401 DISCOVERY ACCELEROMETER Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_ACCELEROMETER_Exported_Functions STM32F401 DISCOVERY ACCELEROMETER Exported Functions - * @{ - */ -/* Accelerometer functions */ -uint8_t BSP_ACCELERO_Init(void); -void BSP_ACCELERO_Reset(void); -void BSP_ACCELERO_Click_ITConfig(void); -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F401_DISCOVERY_ACCELEROMETER_H */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.c b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.c deleted file mode 100644 index 13422c8b36..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.c +++ /dev/null @@ -1,1120 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32F401-Discovery - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES -1. How To use this driver: --------------------------- - - This driver supports STM32F401xx devices on STM32F401-Discovery Kit: - a) to play an audio file (all functions names start by BSP_AUDIO_OUT_xxx) - b) to record an audio file through MP45DT02, ST MEMS (all functions names start by AUDIO_IN_xxx) - -a) PLAY A FILE: -============== - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or - OUTPUT_DEVICE_BOTH) - Volume: initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - If the returned value is different from 0 or the function is stuck then the communication with - the codec (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented - into the audio jack on the discovery board). When the Headphone is connected it is used - as output. When the headphone is disconnected from the audio jack, the output is - automatically switched to Speaker. - - OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size: size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named BSP_AUDIO_OUT_XXXCallBack() and only their prototypes are declared in - the stm32f401_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency or to mute, use the functions - BSP_AUDIO_OUT_Stop(), BSP_AUDIO_OUT_SetVolume(), AUDIO_OUT_SetFrequency() BSP_AUDIO_OUT_SetOutputMode and BSP_AUDIO_OUT_SetMute(). - + The driver API and the callback functions are at the end of the stm32f401_discovery_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm32f401_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32f401_discovery_audio.c file (I2S3_Init()...) - -Known Limitations: -------------------- - 1- When using the Speaker, if the audio file quality is not high enough, the speaker output - may produce high and uncomfortable noise level. To avoid this issue, to use speaker - output properly, try to increase audio file sampling rate (typically higher than 48KHz). - This operation will lead to larger file size. - 2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some - user interrupt routines (in this case, interrupts could be disabled just before the start of - communication then re-enabled when it is over). Note that this communication is only done at - the configuration phase (BSP_AUDIO_OUT_Init() or BSP_AUDIO_OUT_Stop()) and when Volume control modification is - performed (BSP_AUDIO_OUT_SetVolume() or BSP_AUDIO_OUT_SetMute()or BSP_AUDIO_OUT_SetOutputMode()). - When the audio data is played, no communication is required with the audio codec. - 3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 4- Supports only Stereo audio streaming. To play mono audio streams, each data should be sent twice - on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing. - 5- Supports only 16-bits audio data size. - -b) RECORD A FILE: -================ - + Call the function BSP_AUDIO_IN_Init( - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - ) - This function configures all the hardware required for the audio application (I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - - + Call the function BSP_AUDIO_IN_Record( - pbuf Main buffer pointer for the recorded data storing - size Current size of the recorded buffer - ) - to start recording from the microphone. - - + User needs to implement user callbacks to retrieve data saved in the record buffer - (AUDIO_IN_RxHalfCpltCallback/BSP_AUDIO_IN_ReceiveComplete_CallBack) - - + Call the function AUDIO_IN_STOP() to stop recording - -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f401_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO STM32F401 DISCOVERY AUDIO - * @brief This file includes the low layer audio driver available on STM32F401-Discovery - * discovery board. - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Private_Types STM32F401 DISCOVERY AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Private_Defines STM32F401 DISCOVERY AUDIO Private Defines - * @{ - */ -/* These PLL parameters are valid when the f(VCO clock) = 1Mhz */ -const uint32_t I2SFreq[8] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000}; -const uint32_t I2SPLLN[8] = {256, 429, 213, 429, 426, 271, 258, 344}; -const uint32_t I2SPLLR[8] = {5, 4, 4, 4, 4, 6, 3, 1}; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Private_Macros STM32F401 DISCOVERY AUDIO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Private_Variables STM32F401 DISCOVERY AUDIO Private Variables - * @{ - */ -/*##### PLAY #####*/ -static AUDIO_DrvTypeDef *pAudioDrv; -I2S_HandleTypeDef hAudioOutI2s; - -/*### RECORDER ###*/ -I2S_HandleTypeDef hAudioInI2s; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -__IO uint16_t AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Private_Function_Prototypes STM32F401 DISCOVERY AUDIO Private Function Prototypes - * @{ - */ -static uint8_t I2S3_Init(uint32_t AudioFreq); -static uint8_t I2S2_Init(uint32_t AudioFreq); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_OUT_Private_Functions STM32F401 DISCOVERY AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_OK; - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&hAudioOutI2s, AudioFreq, NULL); - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - hAudioOutI2s.Instance = I2S3; - if(HAL_I2S_GetState(&hAudioOutI2s) == HAL_I2S_STATE_RESET) - { - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&hAudioOutI2s, NULL); - } - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - /* Configure the I2S peripheral */ - if(I2S3_Init(AudioFreq) != AUDIO_OK) - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Retrieve audio codec identifier */ - if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID) - { - /* Initialize the audio driver structure */ - pAudioDrv = &cs43l22_drv; - } - else - { - ret = AUDIO_ERROR; - } - } - - if(ret == AUDIO_OK) - { - pAudioDrv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(pAudioDrv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size/AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: Pointer to data address - * @param Size: Number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pData, Size); -} - -/** - * @brief Pauses the audio file stream. In case of using DMA, the DMA Pause - * feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only the - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Resumes the audio file streaming. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer resume function */ - HAL_I2S_DMAResume(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call DMA Stop to disable DMA stream before stopping codec */ - HAL_I2S_DMAStop(&hAudioOutI2s); - - /* Call Audio Codec Stop function */ - if(pAudioDrv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 1ms */ - HAL_Delay(1); - - /* Reset the pin */ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_PIN_RESET); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(pAudioDrv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(pAudioDrv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @note This function modifies a global variable of the audio codec driver: OutputDev. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output Device function */ - if(pAudioDrv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Update the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&hAudioOutI2s, AudioFreq, NULL); - - /* Update the I2S audio frequency configuration */ - I2S3_Init(AudioFreq); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Call the user function which will manage directly transfer complete */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); - } -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Manage the remaining file size and new address offset: This function should - be coded by user (its prototype is already declared in stm32f4_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); - } -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rccclkinit; - uint8_t index = 0, freqindex = 0xFF; - - for(index = 0; index < 8; index++) - { - if(I2SFreq[index] == AudioFreq) - { - freqindex = index; - } - } - /* Enable PLLI2S clock */ - HAL_RCCEx_GetPeriphCLKConfig(&rccclkinit); - /* PLLI2S_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - if ((freqindex & 0x7) == 0) - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = I2SPLLN[freqindex]; - rccclkinit.PLLI2S.PLLI2SR = I2SPLLR[freqindex]; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } - else - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = 258; - rccclkinit.PLLI2S.PLLI2SR = 3; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } -} - -/** - * @brief AUDIO OUT I2S MSP Init. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2sTx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable I2S3 clock */ - I2S3_CLK_ENABLE(); - - /*** Configure the GPIOs ***/ - /* Enable I2S GPIO clocks */ - I2S3_SCK_SD_CLK_ENABLE(); - I2S3_WS_CLK_ENABLE(); - - /* I2S3 pins configuration: WS, SCK and SD pins ----------------------------*/ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = I2S3_SCK_SD_WS_AF; - HAL_GPIO_Init(I2S3_SCK_SD_GPIO_PORT, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = I2S3_WS_PIN ; - HAL_GPIO_Init(I2S3_WS_GPIO_PORT, &GPIO_InitStruct); - - /* I2S3 pins configuration: MCK pin */ - I2S3_MCK_CLK_ENABLE(); - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_Init(I2S3_MCK_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the I2S DMA clock */ - I2S3_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == I2S3) - { - /* Configure the hdma_i2sTx handle parameters */ - hdma_i2sTx.Init.Channel = I2S3_DMAx_CHANNEL; - hdma_i2sTx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2sTx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sTx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sTx.Init.PeriphDataAlignment = I2S3_DMAx_PERIPH_DATA_SIZE; - hdma_i2sTx.Init.MemDataAlignment = I2S3_DMAx_MEM_DATA_SIZE; - hdma_i2sTx.Init.Mode = DMA_NORMAL; - hdma_i2sTx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_i2sTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sTx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sTx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_i2sTx.Instance = I2S3_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2sTx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sTx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sTx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S3_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S3_DMAx_IRQ); -} - -/** - * @brief De-Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S3_DMAx_IRQ); - - if(hi2s->Instance == I2S3) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmatx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* CODEC_I2S pins configuration: SCK and SD pins */ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - HAL_GPIO_DeInit(I2S3_SCK_SD_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: WS pin */ - GPIO_InitStruct.Pin = I2S3_WS_PIN; - HAL_GPIO_DeInit(I2S3_WS_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: MCK pin */ - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_DeInit(I2S3_MCK_GPIO_PORT, GPIO_InitStruct.Pin); - - /* Disable I2S clock */ - I2S3_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S3_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioOutI2s Instance parameter */ - hAudioOutI2s.Instance = I2S3; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioOutI2s); - - /* I2S3 peripheral configuration */ - hAudioOutI2s.Init.AudioFreq = AudioFreq; - hAudioOutI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioOutI2s.Init.CPOL = I2S_CPOL_LOW; - hAudioOutI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioOutI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - hAudioOutI2s.Init.Mode = I2S_MODE_MASTER_TX; - hAudioOutI2s.Init.Standard = I2S_STANDARD; - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioOutI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_IN_Private_Functions STM32F401 DISCOVERY AUDIO IN Private Functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio frequency to be configured for the I2S peripheral. - * @param ChnlNbr: Audio frequency to be configured for the I2S peripheral. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - /* Configure PLL clock */ - BSP_AUDIO_IN_ClockConfig(&hAudioInI2s, AudioFreq, NULL); - - /* Configure the PDM library */ - /* On STM32F401-Discovery a single microphone is mounted, samples are duplicated - to make stereo audio streams */ - PDMDecoder_Init(AudioFreq, ChnlNbr, 2); - - /* Configure the I2S peripheral */ - hAudioInI2s.Instance = I2S2; - if(HAL_I2S_GetState(&hAudioInI2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&hAudioInI2s, NULL); - } - - /* Configure the I2S2 */ - I2S2_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&hAudioInI2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAStop(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf) -{ - uint16_t AppPDM[INTERNAL_BUFF_SIZE/2]; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; indexInstance == I2S2) - { - /* Configure the hdma_i2sRx handle parameters */ - hdma_i2sRx.Init.Channel = I2S2_DMAx_CHANNEL; - hdma_i2sRx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2sRx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sRx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sRx.Init.PeriphDataAlignment = I2S2_DMAx_PERIPH_DATA_SIZE; - hdma_i2sRx.Init.MemDataAlignment = I2S2_DMAx_MEM_DATA_SIZE; - hdma_i2sRx.Init.Mode = DMA_CIRCULAR; - hdma_i2sRx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sRx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2sRx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sRx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sRx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2sRx.Instance = I2S2_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2sRx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sRx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sRx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S2_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S2_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S2_DMAx_IRQ); - - if(hi2s->Instance == I2S2) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = I2S2_SCK_PIN; - HAL_GPIO_DeInit(I2S2_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = I2S2_MOSI_PIN; - HAL_GPIO_DeInit(I2S2_MOSI_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - I2S2_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S2_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - hAudioInI2s.Instance = I2S2; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioInI2s); - - /* I2S2 peripheral configuration */ - hAudioInI2s.Init.AudioFreq = 2 * AudioFreq; - hAudioInI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioInI2s.Init.CPOL = I2S_CPOL_HIGH; - hAudioInI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioInI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - hAudioInI2s.Init.Mode = I2S_MODE_MASTER_RX; - hAudioInI2s.Init.Standard = I2S_STANDARD_LSB; - - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioInI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_IN_OUT_Private_Functions STM32F401 DISCOVERY AUDIO IN OUT Private Functions - * @{ - */ - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32f401_discovery_audio.h) */ - if(hi2s->Instance == I2S3) - { - BSP_AUDIO_OUT_Error_CallBack(); - } - if(hi2s->Instance == I2S2) - { - BSP_AUDIO_IN_Error_Callback(); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.h b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.h deleted file mode 100644 index 41a7860081..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_audio.h +++ /dev/null @@ -1,254 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * stm32f401_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F401_DISCOVERY_AUDIO_H -#define __STM32F401_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/cs43l22/cs43l22.h" -#include "stm32f401_discovery.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY_AUDIO - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Exported_Types STM32F401 DISCOVERY AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_OUT_Exported_Constants STM32F401 DISCOVERY AUDIO OUT Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - AUDIO OUT CONFIGURATION -------------------------------------------------------------------------------*/ - -/* I2S peripheral configuration defines */ -#define I2S3 SPI3 -#define I2S3_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define I2S3_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define I2S3_SCK_SD_WS_AF GPIO_AF6_SPI3 -#define I2S3_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_WS_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define I2S3_WS_PIN GPIO_PIN_4 -#define I2S3_SCK_PIN GPIO_PIN_10 -#define I2S3_SD_PIN GPIO_PIN_12 -#define I2S3_MCK_PIN GPIO_PIN_7 -#define I2S3_SCK_SD_GPIO_PORT GPIOC -#define I2S3_WS_GPIO_PORT GPIOA -#define I2S3_MCK_GPIO_PORT GPIOC - -/* I2S DMA Stream definitions */ -#define I2S3_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S3_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S3_DMAx_STREAM DMA1_Stream7 -#define I2S3_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S3_DMAx_IRQ DMA1_Stream7_IRQn -#define I2S3_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S3_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define I2S3_IRQHandler DMA1_Stream7_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 0x0E /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define I2S2 SPI2 -#define I2S2_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() -#define I2S2_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() -#define I2S2_SCK_PIN GPIO_PIN_10 -#define I2S2_SCK_GPIO_PORT GPIOB -#define I2S2_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define I2S2_SCK_AF GPIO_AF5_SPI2 - -#define I2S2_MOSI_PIN GPIO_PIN_3 -#define I2S2_MOSI_GPIO_PORT GPIOC -#define I2S2_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S2_MOSI_AF GPIO_AF5_SPI2 - -/* I2S DMA Stream Rx definitions */ -#define I2S2_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S2_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S2_DMAx_STREAM DMA1_Stream3 -#define I2S2_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S2_DMAx_IRQ DMA1_Stream3_IRQn -#define I2S2_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S2_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define I2S2_IRQHandler DMA1_Stream3_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK 0 -#define AUDIO_ERROR 1 -#define AUDIO_TIMEOUT 2 - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION 16 -#define DEFAULT_AUDIO_IN_CHANNEL_NBR 1 /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME 64 - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR -/* PCM buffer output size */ -#define PCM_OUT_SIZE DEFAULT_AUDIO_IN_FREQ/1000 -#define CHANNEL_DEMUX_MASK 0x55 - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Exported_Variables STM32F401 DISCOVERY AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_Exported_Macros STM32F401 DISCOVERY AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE) -#define HTONS(A) ((((uint16_t)(A) & 0xff00) >> 8) | (((uint16_t)(A) & 0x00ff) << 8)) - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_OUT_Exported_Functions STM32F401 DISCOVERY AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred. */ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_AUDIO_IN_Exported_Functions STM32F401 DISCOVERY AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F401_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.c b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.c deleted file mode 100644 index 5d5c10fbc3..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.c +++ /dev/null @@ -1,230 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery_gyroscope.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the - * MEMS gyroscope available on STM32F401-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32f401_discovery_gyroscope.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE STM32F401 DISCOVERY GYROSCOPE - * @{ - */ - - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_TypesDefinitions STM32F401 DISCOVERY GYROSCOPE Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_Defines STM32F401 DISCOVERY GYROSCOPE Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_Macros STM32F401 DISCOVERY GYROSCOPE Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_Variables STM32F401 DISCOVERY GYROSCOPE Private Variables - * @{ - */ -static GYRO_DrvTypeDef *GyroscopeDrv; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_FunctionPrototypes STM32F401 DISCOVERY GYROSCOPE Private FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Private_Functions STM32F401 DISCOVERY GYROSCOPE Private Functions - * @{ - */ - -/** - * @brief Set Gyroscope Initialization. - * @retval GYRO_OK if no problem during initialization - */ -uint8_t BSP_GYRO_Init(void) -{ - uint8_t ret = GYRO_ERROR; - uint16_t ctrl = 0x0000; - GYRO_InitTypeDef L3GD20_InitStructure; - GYRO_FilterConfigTypeDef L3GD20_FilterStructure = {0,0}; - - if((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR)) - { - /* Initialize the Gyroscope driver structure */ - GyroscopeDrv = &L3gd20Drv; - - /* MEMS configuration ----------------------------------------------------*/ - /* Fill the Gyroscope structure */ - L3GD20_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE; - L3GD20_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARATE_1; - L3GD20_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE; - L3GD20_InitStructure.Band_Width = L3GD20_BANDWIDTH_4; - L3GD20_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous; - L3GD20_InitStructure.Endianness = L3GD20_BLE_LSB; - L3GD20_InitStructure.Full_Scale = L3GD20_FULLSCALE_500; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl = (uint16_t) (L3GD20_InitStructure.Power_Mode | L3GD20_InitStructure.Output_DataRate | \ - L3GD20_InitStructure.Axes_Enable | L3GD20_InitStructure.Band_Width); - - ctrl |= (uint16_t) ((L3GD20_InitStructure.BlockData_Update | L3GD20_InitStructure.Endianness | \ - L3GD20_InitStructure.Full_Scale) << 8); - - /* Configure the Gyroscope main parameters */ - GyroscopeDrv->Init(ctrl); - - L3GD20_FilterStructure.HighPassFilter_Mode_Selection =L3GD20_HPM_NORMAL_MODE_RES; - L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0; - - ctrl = (uint8_t) ((L3GD20_FilterStructure.HighPassFilter_Mode_Selection |\ - L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency)); - - /* Configure the Gyroscope main parameters */ - GyroscopeDrv->FilterConfig(ctrl) ; - - GyroscopeDrv->FilterCmd(L3GD20_HIGHPASSFILTER_ENABLE); - - ret = GYRO_OK; - } - return ret; -} - -/** - * @brief Read ID of Gyroscope component. - * @retval ID - */ -uint8_t BSP_GYRO_ReadID(void) -{ - uint8_t id = 0x00; - - if(GyroscopeDrv->ReadID != NULL) - { - id = GyroscopeDrv->ReadID(); - } - return id; -} - -/** - * @brief Reboot memory content of Gyroscope. - */ -void BSP_GYRO_Reset(void) -{ - if(GyroscopeDrv->Reset != NULL) - { - GyroscopeDrv->Reset(); - } -} - -/** - * @brief Configures INT1 interrupt. - * @param pIntConfig: pointer to a L3GD20_InterruptConfig_TypeDef - * structure that contains the configuration setting for the L3GD20 Interrupt. - */ -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfig) -{ - uint16_t interruptconfig = 0x0000; - - if(GyroscopeDrv->ConfigIT != NULL) - { - /* Configure latch Interrupt request and axe interrupts */ - interruptconfig |= ((uint8_t)(pIntConfig->Latch_Request| \ - pIntConfig->Interrupt_Axes) << 8); - - interruptconfig |= (uint8_t)(pIntConfig->Interrupt_ActiveEdge); - - GyroscopeDrv->ConfigIT(interruptconfig); - } -} - -/** - * @brief Enables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - */ -void BSP_GYRO_EnableIT(uint8_t IntPin) -{ - if(GyroscopeDrv->EnableIT != NULL) - { - GyroscopeDrv->EnableIT(IntPin); - } -} - -/** - * @brief Disables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - */ -void BSP_GYRO_DisableIT(uint8_t IntPin) -{ - if(GyroscopeDrv->DisableIT != NULL) - { - GyroscopeDrv->DisableIT(IntPin); - } -} - -/** - * @brief Get XYZ angular acceleration. - * @param pfData: pointer on floating array - */ -void BSP_GYRO_GetXYZ(float *pfData) -{ - if(GyroscopeDrv->GetXYZ!= NULL) - { - GyroscopeDrv->GetXYZ(pfData); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.h b/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.h deleted file mode 100644 index be753857a3..0000000000 --- a/Drivers/BSP/STM32F401-Discovery/stm32f401_discovery_gyroscope.h +++ /dev/null @@ -1,106 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f401_discovery_gyroscope.h - * @author MCD Application Team - * @brief This file contains definitions for stm32f401_discovery_gyroscope.c - * firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F401_DISCOVERY_GYROSCOPE_H -#define __STM32F401_DISCOVERY_GYROSCOPE_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f401_discovery.h" - - /* Include Gyroscope component driver */ -#include "../Components/l3gd20/l3gd20.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F401_DISCOVERY - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE STM32F401 DISCOVERY GYROSCOPE - * @{ - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Exported_Types STM32F401 DISCOVERY GYROSCOPE Exported Types - * @{ - */ -typedef enum -{ - GYRO_OK = 0, - GYRO_ERROR = 1, - GYRO_TIMEOUT = 2 -}GYRO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Exported_Constants STM32F401 DISCOVERY GYROSCOPE Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Exported_Macros STM32F401 DISCOVERY GYROSCOPE Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F401_DISCOVERY_GYROSCOPE_Exported_Functions STM32F401 DISCOVERY GYROSCOPE Exported Functions - * @{ - */ -/* Gyroscope Functions */ -uint8_t BSP_GYRO_Init(void); -void BSP_GYRO_Reset(void); -uint8_t BSP_GYRO_ReadID(void); -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfigStruct); -void BSP_GYRO_EnableIT(uint8_t IntPin); -void BSP_GYRO_DisableIT(uint8_t IntPin); -void BSP_GYRO_GetXYZ(float *pfData); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus - } -#endif - -#endif /* __STM32F401_DISCOVERY_GYROSCOPE_H */ diff --git a/Drivers/BSP/STM32F411E-Discovery b/Drivers/BSP/STM32F411E-Discovery new file mode 160000 index 0000000000..c7de631ade --- /dev/null +++ b/Drivers/BSP/STM32F411E-Discovery @@ -0,0 +1 @@ +Subproject commit c7de631adeb20ecd2097581ab22e88d316a8bdb3 diff --git a/Drivers/BSP/STM32F411E-Discovery/LICENSE.md b/Drivers/BSP/STM32F411E-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F411E-Discovery/README.md b/Drivers/BSP/STM32F411E-Discovery/README.md deleted file mode 100644 index 60552f90fd..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# BSP STM32F411E-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f411e-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f411e-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F411E-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f411e-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-cs43l22](https://github.com/STMicroelectronics/stm32-cs43l22) -* [stm32-i3g4250d](https://github.com/STMicroelectronics/stm32-i3g4250d) -* [stm32-l3gd20](https://github.com/STMicroelectronics/stm32-l3gd20) -* [stm32-lsm303agr](https://github.com/STMicroelectronics/stm32-lsm303agr) -* [stm32-lsm303dlhc](https://github.com/STMicroelectronics/stm32-lsm303dlhc) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F411E-Discovery/Release_Notes.html b/Drivers/BSP/STM32F411E-Discovery/Release_Notes.html deleted file mode 100644 index 580ff84457..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/Release_Notes.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - Release Notes for STM32F411E-Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F411E-Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F411E-Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update accelerometer and gyroscope drivers to support new I2G4250D and LSM303AGR components.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove date & version
  • -
  • Add general description of BSP drivers
  • -
  • stm32f411e_discovery_audio.c/.h: -
      -
    • Aligned with PDM library v3.0.0
    • -
  • -
  • Note -
      -
    • This version must be used with v3.0.0 of PDM library
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Replace __PPP_CLK_ENABLE/DISABLE with __HAL_RCC_PPP_ENABLE/DISABLE
  • -
  • Align audio drivers to the BSP spec: -
      -
    • Add BSP_AUDIO_OUT_ClockConfig, BSP_AUDIO_OUT_MspInit and BSP_AUDIO_OUT_MspDeInit as weak functions
    • -
    • Add BSP_AUDIO_IN_ClockConfig, BSP_AUDIO_IN_MspInit and BSP_AUDIO_IN_MspDeInit as weak functions
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F4-Discovery_BSP_User_Manual.chm file
  • -
  • stm32f411e_discovery_audio.c -
      -
    • BSP_AUDIO_OUT_Init() update to configure correctly the PLL I2S parameters
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official version of the STM32F411E-Discovery Board Drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F411E-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32F411E-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F411E-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F411E-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F411E-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F411E-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F411E-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F411E-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.c b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.c deleted file mode 100644 index fbf80a953f..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.c +++ /dev/null @@ -1,727 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage LEDs and - * push-button available on STM32F411-Discovery Kit from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f411e_discovery.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY STM32F411E discovery - * @{ - */ - -/** @defgroup STM32F411E_discovery_LOW_LEVEL STM32F411E discovery LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F411-Discovery Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F411E_discovery_LOW_LEVEL_Private_TypesDefinitions STM32F411E discovery LOW LEVEL Privat TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_discovery_LOW_LEVEL_Private_Defines STM32F411E discovery LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32F411E DISCO BSP Driver version number V1.0.6 - */ -#define __STM32F411E_DISCO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F411E_DISCO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM32F411E_DISCO_BSP_VERSION_SUB2 (0x06) /*!< [15:8] sub2 version */ -#define __STM32F411E_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F411E_DISCO_BSP_VERSION ((__STM32F411E_DISCO_BSP_VERSION_MAIN << 24)\ - |(__STM32F411E_DISCO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F411E_DISCO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F411E_DISCO_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM32F411E_discovery_LOW_LEVEL_Private_Macros STM32F411E discovery LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_discovery_LOW_LEVEL_Private_Variables STM32F411E discovery LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED4_GPIO_PORT, - LED3_GPIO_PORT, - LED5_GPIO_PORT, - LED6_GPIO_PORT}; - -const uint16_t GPIO_PIN[LEDn] = {LED4_PIN, - LED3_PIN, - LED5_PIN, - LED6_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn}; - -uint32_t I2cxTimeout = I2Cx_TIMEOUT_MAX; /* 0x01) - { - WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD; - } - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(WriteAddr); - - /* Send the data that will be written into the device (MSB First) */ - while(NumByteToWrite >= 0x01) - { - SPIx_WriteRead(*pBuffer); - NumByteToWrite--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - -/** - * @brief Reads a block of data from the GYRO. - * @param pBuffer: pointer to the buffer that receives the data read from the GYRO. - * @param ReadAddr: GYRO's internal address to read from. - * @param NumByteToRead: Number of bytes to read from the GYRO. - */ -void GYRO_IO_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) -{ - if(NumByteToRead > 0x01) - { - ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD); - } - else - { - ReadAddr |= (uint8_t)READWRITE_CMD; - } - - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(ReadAddr); - - /* Receive the data that will be read from the device (MSB First) */ - while(NumByteToRead > 0x00) - { - /* Send dummy byte (0x00) to generate the SPI clock to GYRO (Slave device) */ - *pBuffer = SPIx_WriteRead(DUMMY_BYTE); - NumByteToRead--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable Reset GPIO Clock */ - AUDIO_RESET_GPIO_CLK_ENABLE(); - - /* Audio reset pin configuration -------------------------------------------*/ - GPIO_InitStruct.Pin = AUDIO_RESET_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(AUDIO_RESET_GPIO, &GPIO_InitStruct); - - I2Cx_Init(); - - /* Power Down the codec */ - CODEC_AUDIO_POWER_OFF(); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); - - /* Power on the codec */ - CODEC_AUDIO_POWER_ON(); - - /* Wait for a delay to insure registers erasing */ - HAL_Delay(5); -} - -/** - * @brief DeInitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write (uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_WriteData(Addr, Reg, Value); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint8_t AUDIO_IO_Read (uint8_t Addr, uint8_t Reg) -{ - return I2Cx_ReadData(Addr, Reg); -} - -/****************************** LINK ACCELEROMETER ****************************/ - -/** - * @brief Configures COMPASS / ACCELERO I2C interface. - */ -void COMPASSACCELERO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable DRDY clock */ - ACCELERO_DRDY_GPIO_CLK_ENABLE(); - - /* MEMS DRDY pin configuration */ - GPIO_InitStructure.Pin = ACCELERO_DRDY_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_INPUT; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(ACCELERO_DRDY_GPIO_PORT, &GPIO_InitStructure); - - I2Cx_Init(); -} - -/** - * @brief Configures COMPASS / ACCELERO click IT. - */ -void COMPASSACCELERO_IO_ITConfig(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable INT1 and INT2 GPIO clock */ - ACCELERO_INT_GPIO_CLK_ENABLE(); - - /* Configure GPIO PINs to detect Interrupts */ - GPIO_InitStructure.Pin = ACCELERO_INT1_PIN | ACCELERO_INT2_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - GPIO_InitStructure.Pull = GPIO_NOPULL; - HAL_GPIO_Init(ACCELERO_INT_GPIO_PORT, &GPIO_InitStructure); - - /* Enable and set COMPASS / ACCELERO Interrupt to the lowest priority */ - HAL_NVIC_SetPriority(ACCELERO_INT1_EXTI_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(ACCELERO_INT1_EXTI_IRQn); -} - -/** - * @brief Writes one byte to the COMPASS / ACCELERO. - * @param DeviceAddr: the slave address to be programmed - * @param RegisterAddr: the COMPASS / ACCELERO register to be written - * @param Value: Data to be written - */ -void COMPASSACCELERO_IO_Write(uint16_t DeviceAddr, uint8_t RegisterAddr, uint8_t Value) -{ - /* Call I2Cx Read data bus function */ - I2Cx_WriteData(DeviceAddr, RegisterAddr, Value); -} - -/** - * @brief Reads a block of data from the COMPASS / ACCELERO. - * @param DeviceAddr: the slave address to be programmed(ACC_I2C_ADDRESS or MAG_I2C_ADDRESS). - * @param RegisterAddr: the COMPASS / ACCELERO internal address register to read from - * @retval COMPASS / ACCELERO register value - */ -uint8_t COMPASSACCELERO_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr) -{ - /* Call I2Cx Read data bus function */ - return I2Cx_ReadData(DeviceAddr, RegisterAddr); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.h b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.h deleted file mode 100644 index 2435c24fac..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery.h +++ /dev/null @@ -1,292 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32F401-Discovery Kit's Leds and - * push-button hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F411E_DISCOVERY_H -#define __STM32F411E_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL STM32F411E DISCOVERY HLOW LEVEL - * @{ - */ - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL_Exported_Types STM32F411E DISCOVERY HLOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED4 = 0, - LED3 = 1, - LED5 = 2, - LED6 = 3 -}Led_TypeDef; - -typedef enum -{ - BUTTON_KEY = 0, -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; -/** - * @} - */ - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL_Exported_Constants STM32F411E DISCOVERY HLOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F411E_DISCOVERY board - */ -#if !defined (USE_STM32F411E_DISCO) - #define USE_STM32F411E_DISCO -#endif - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL_LED STM32F411E DISCOVERY HLOW LEVEL LED - * @{ - */ -#define LEDn 4 - -#define LED4_PIN GPIO_PIN_12 -#define LED4_GPIO_PORT GPIOD -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED3_PIN GPIO_PIN_13 -#define LED3_GPIO_PORT GPIOD -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED5_PIN GPIO_PIN_14 -#define LED5_GPIO_PORT GPIOD -#define LED5_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED5_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - - -#define LED6_PIN GPIO_PIN_15 -#define LED6_GPIO_PORT GPIOD -#define LED6_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LED6_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_ENABLE(); \ - }while(0) - -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED4_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 2) LED5_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 3) LED6_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL_BUTTON STM32F411E DISCOVERY HLOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Wakeup push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_0 -#define KEY_BUTTON_GPIO_PORT GPIOA -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI0_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup __STM32F411E_DISCOVERY_HLOW_LEVEL_BUS STM32F411E DISCOVERY HLOW LEVEL BUS - * @{ - */ - -/*############################### I2Cx #######################################*/ -#define DISCOVERY_I2Cx I2C1 -#define DISCOVERY_I2Cx_CLOCK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() -#define DISCOVERY_I2Cx_GPIO_PORT GPIOB /* GPIOB */ -#define DISCOVERY_I2Cx_SCL_PIN GPIO_PIN_6 /* PB.06 */ -#define DISCOVERY_I2Cx_SDA_PIN GPIO_PIN_9 /* PB.09 */ -#define DISCOVERY_I2Cx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define DISCOVERY_I2Cx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define DISCOVERY_I2Cx_AF GPIO_AF4_I2C1 - -#define DISCOVERY_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET() -#define DISCOVERY_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() - -/* I2C interrupt requests */ -#define DISCOVERY_I2Cx_EV_IRQn I2C1_EV_IRQn -#define DISCOVERY_I2Cx_ER_IRQn I2C1_ER_IRQn - -/* I2C speed and timeout max */ -#define I2Cx_TIMEOUT_MAX 0xA000 /*Init(ctrl); - - /* Fill the accelerometer LPF structure */ - Accelero_FilterStructure.HighPassFilter_Mode_Selection = LSM303DLHC_HPM_NORMAL_MODE; - Accelero_FilterStructure.HighPassFilter_CutOff_Frequency = LSM303DLHC_HPFCF_16; - Accelero_FilterStructure.HighPassFilter_AOI1 = LSM303DLHC_HPF_AOI1_DISABLE; - Accelero_FilterStructure.HighPassFilter_AOI2 = LSM303DLHC_HPF_AOI2_DISABLE; - - /* Configure MEMS: mode, cutoff frquency, Filter status, Click, AOI1 and AOI2 */ - ctrl = (uint8_t) (Accelero_FilterStructure.HighPassFilter_Mode_Selection |\ - Accelero_FilterStructure.HighPassFilter_CutOff_Frequency |\ - Accelero_FilterStructure.HighPassFilter_AOI1 |\ - Accelero_FilterStructure.HighPassFilter_AOI2); - - /* Configure the accelerometer LPF main parameters */ - AccelerometerDrv->FilterConfig(ctrl); - - ret = ACCELERO_OK; - } - else if(Lsm303agrDrv.ReadID() == I_AM_LSM303AGR) - { - /* Initialize the accelerometer driver structure */ - AccelerometerDrv = &Lsm303agrDrv; - - /* MEMS configuration ----------------------------------------------------*/ - /* Fill the accelerometer structure */ - Accelero_InitStructure.Power_Mode = LSM303AGR_NORMAL_MODE; - Accelero_InitStructure.AccOutput_DataRate = LSM303AGR_ODR_50_HZ; - Accelero_InitStructure.Axes_Enable = LSM303AGR_AXES_ENABLE; - Accelero_InitStructure.AccFull_Scale = LSM303AGR_FULLSCALE_2G; - Accelero_InitStructure.BlockData_Update = LSM303AGR_BlockUpdate_Continous; - Accelero_InitStructure.Endianness = LSM303AGR_BLE_LSB; - Accelero_InitStructure.High_Resolution = LSM303AGR_HR_ENABLE; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl |= (Accelero_InitStructure.Power_Mode | Accelero_InitStructure.AccOutput_DataRate | \ - Accelero_InitStructure.Axes_Enable); - - ctrl |= ((Accelero_InitStructure.BlockData_Update | Accelero_InitStructure.Endianness | \ - Accelero_InitStructure.AccFull_Scale | Accelero_InitStructure.High_Resolution) << 8); - - /* Configure the accelerometer main parameters */ - AccelerometerDrv->Init(ctrl); - - /* Fill the accelerometer LPF structure */ - Accelero_FilterStructure.HighPassFilter_Mode_Selection = LSM303AGR_HPM_NORMAL_MODE; - Accelero_FilterStructure.HighPassFilter_CutOff_Frequency = LSM303AGR_HPFCF_16; - Accelero_FilterStructure.HighPassFilter_AOI1 = LSM303AGR_HPF_AOI1_DISABLE; - Accelero_FilterStructure.HighPassFilter_AOI2 = LSM303AGR_HPF_AOI2_DISABLE; - - /* Configure MEMS: mode, cutoff frquency, Filter status, Click, AOI1 and AOI2 */ - ctrl = (uint8_t) (Accelero_FilterStructure.HighPassFilter_Mode_Selection |\ - Accelero_FilterStructure.HighPassFilter_CutOff_Frequency |\ - Accelero_FilterStructure.HighPassFilter_AOI1 |\ - Accelero_FilterStructure.HighPassFilter_AOI2); - - /* Configure the accelerometer LPF main parameters */ - AccelerometerDrv->FilterConfig(ctrl); - - ret = ACCELERO_OK; - } - - return ret; -} - -/** - * @brief Reboot memory content of Accelerometer. - */ -void BSP_ACCELERO_Reset(void) -{ - if(AccelerometerDrv->Reset != NULL) - { - AccelerometerDrv->Reset(); - } -} - -/** - * @brief Configure accelerometer click IT. - */ -void BSP_ACCELERO_Click_ITConfig(void) -{ - if(AccelerometerDrv->ConfigIT!= NULL) - { - AccelerometerDrv->ConfigIT(); - } -} - -/** - * @brief Get XYZ axes acceleration. - * @param pDataXYZ: Pointer to 3 angular acceleration axes. - * pDataXYZ[0] = X axis, pDataXYZ[1] = Y axis, pDataXYZ[2] = Z axis - */ -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ) -{ - int16_t SwitchXY = 0; - - if(AccelerometerDrv->GetXYZ!= NULL) - { - AccelerometerDrv->GetXYZ(pDataXYZ); - - /* Switch X and Y Axes in case of LSM303DLHC MEMS */ - if(AccelerometerDrv == &Lsm303dlhcDrv) - { - SwitchXY = pDataXYZ[0]; - pDataXYZ[0] = pDataXYZ[1]; - - /* Invert Y Axis to be conpliant with LIS3DSH */ - pDataXYZ[1] = -SwitchXY; - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_accelerometer.h b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_accelerometer.h deleted file mode 100644 index 556062828c..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_accelerometer.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery_accelerometer.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f411e_discovery_accelerometer.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F411E_DISCOVERY_ACCELEROMETER_H -#define __STM32F411E_DISCOVERY_ACCELEROMETER_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f411e_discovery.h" - -/* Include Accelerometer component driver */ -#include "../Components/lsm303dlhc/lsm303dlhc.h" -#include "../Components/lsm303agr/lsm303agr.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY_ACCELEROMETER - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_ACCELEROMETER_Exported_Types STM32F411E DISCOVERY ACCELEROMETER Exported Types - * @{ - */ -typedef enum -{ - ACCELERO_OK = 0, - ACCELERO_ERROR = 1, - ACCELERO_TIMEOUT = 2 -}ACCELERO_StatusTypeDef; - -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_ACCELEROMETER_Exported_Constants STM32F411E DISCOVERY ACCELEROMETER Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_ACCELEROMETER_Exported_Functions STM32F411E DISCOVERY ACCELEROMETER Exported Functions - * @{ - */ -/* Accelerometer functions */ -uint8_t BSP_ACCELERO_Init(void); -void BSP_ACCELERO_Reset(void); -void BSP_ACCELERO_Click_ITConfig(void); -void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F411E_DISCOVERY_ACCELEROMETER_H */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.c b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.c deleted file mode 100644 index fcea4177a2..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.c +++ /dev/null @@ -1,1147 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32F411E-Discovery - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES -1. How To use this driver: --------------------------- - - This driver supports STM32F411xx devices on STM32F411E-Discovery Kit: - a) to play an audio file (all functions names start by BSP_AUDIO_OUT_xxx) - b) to record an audio file through MP45DT02, ST MEMS (all functions names start by AUDIO_IN_xxx) - -a) PLAY A FILE: -============== - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_AUTO or - OUTPUT_DEVICE_BOTH) - Volume: initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - If the returned value is different from 0 or the function is stuck then the communication with - the codec (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER: only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_AUTO: Selection of output device is made through external switch (implemented - into the audio jack on the discovery board). When the Headphone is connected it is used - as output. When the headphone is disconnected from the audio jack, the output is - automatically switched to Speaker. - - OUTPUT_DEVICE_BOTH: both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size: size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named BSP_AUDIO_OUT_XXXCallBack() and only their prototypes are declared in - the stm32f411e_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency or to mute, use the functions - BSP_AUDIO_OUT_Stop(), BSP_AUDIO_OUT_SetVolume(), AUDIO_OUT_SetFrequency() BSP_AUDIO_OUT_SetOutputMode and BSP_AUDIO_OUT_SetMute(). - + The driver API and the callback functions are at the end of the stm32f411e_discovery_audio.h file. - -Driver architecture: --------------------- - + This driver provide the High Audio Layer: consists of the function API exported in the stm32f411e_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32f411e_discovery_audio.c file (I2S3_Init()...) - -Known Limitations: -------------------- - 1- When using the Speaker, if the audio file quality is not high enough, the speaker output - may produce high and uncomfortable noise level. To avoid this issue, to use speaker - output properly, try to increase audio file sampling rate (typically higher than 48KHz). - This operation will lead to larger file size. - 2- Communication with the audio codec (through I2C) may be corrupted if it is interrupted by some - user interrupt routines (in this case, interrupts could be disabled just before the start of - communication then re-enabled when it is over). Note that this communication is only done at - the configuration phase (BSP_AUDIO_OUT_Init() or BSP_AUDIO_OUT_Stop()) and when Volume control modification is - performed (BSP_AUDIO_OUT_SetVolume() or BSP_AUDIO_OUT_SetMute()or BSP_AUDIO_OUT_SetOutputMode()). - When the audio data is played, no communication is required with the audio codec. - 3- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 4- Supports only Stereo audio streaming. To play mono audio streams, each data should be sent twice - on the I2S or should be duplicated on the source buffer. Or convert the stream in stereo before playing. - 5- Supports only 16-bits audio data size. - -b) RECORD A FILE: -================ - + Call the function BSP_AUDIO_IN_Init( - AudioFreq: Audio frequency in Hz (8000, 16000, 22500, 32000 ...) - ) - This function configures all the hardware required for the audio application (I2S, - GPIOs, DMA and interrupt if needed). This function returns 0 if configuration is OK. - - + Call the function BSP_AUDIO_IN_Record( - pbuf Main buffer pointer for the recorded data storing - size Current size of the recorded buffer - ) - to start recording from the microphone. - - + User needs to implement user callbacks to retrieve data saved in the record buffer - (AUDIO_IN_RxHalfCpltCallback/BSP_AUDIO_IN_ReceiveComplete_CallBack) - - + Call the function AUDIO_IN_STOP() to stop recording - -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f411e_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO STM32F411E DISCOVERY AUDIO - * @brief This file includes the low layer audio driver available on STM32F411E-Discovery - * discovery board. - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Private_Types STM32F411E DISCOVERY AUDIO Private Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Private_Defines STM32F411E DISCOVERY AUDIO Private Defines - * @{ - */ -/* These PLL parameters are valid when the f(VCO clock) = 1Mhz */ -const uint32_t I2SFreq[8] = {8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000}; -const uint32_t I2SPLLN[8] = {256, 429, 213, 429, 426, 271, 258, 344}; -const uint32_t I2SPLLR[8] = {5, 4, 4, 4, 4, 6, 3, 1}; -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Private_Macros STM32F411E DISCOVERY AUDIO Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Private_Variables STM32F411E DISCOVERY AUDIO Private Variables - * @{ - */ -/*##### PLAY #####*/ -static AUDIO_DrvTypeDef *pAudioDrv; -I2S_HandleTypeDef hAudioOutI2s; - -/*### RECORDER ###*/ -I2S_HandleTypeDef hAudioInI2s; - -/* PDM filters params */ -PDM_Filter_Handler_t PDM_FilterHandler[2]; -PDM_Filter_Config_t PDM_FilterConfig[2]; - -__IO uint16_t AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Private_Function_Prototypes STM32F411E DISCOVERY AUDIO Private Function Prototypes - * @{ - */ -static uint8_t I2S3_Init(uint32_t AudioFreq); -static uint8_t I2S2_Init(uint32_t AudioFreq); -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut); -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_OUT_Private_Functions STM32F411E DISCOVERY AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO . - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_OK; - - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&hAudioOutI2s, AudioFreq, NULL); - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - hAudioOutI2s.Instance = I2S3; - if(HAL_I2S_GetState(&hAudioOutI2s) == HAL_I2S_STATE_RESET) - { - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_OUT_MspInit(&hAudioOutI2s, NULL); - } - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from memory to I2S peripheral */ - /* Configure the I2S peripheral */ - if(I2S3_Init(AudioFreq) != AUDIO_OK) - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Retrieve audio codec identifier */ - if(((cs43l22_drv.ReadID(AUDIO_I2C_ADDRESS)) & CS43L22_ID_MASK) == CS43L22_ID) - { - /* Initialize the audio driver structure */ - pAudioDrv = &cs43l22_drv; - } - else - { - ret = AUDIO_ERROR; - } - } - - if(ret == AUDIO_OK) - { - pAudioDrv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(pAudioDrv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pBuffer, DMA_MAX(Size/AUDIODATA_SIZE)); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: Pointer to data address - * @param Size: Number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&hAudioOutI2s, pData, Size); -} - -/** - * @brief Pauses the audio file stream. In case of using DMA, the DMA Pause - * feature is used. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only the - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Resumes the audio file streaming. - * WARNING: When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(pAudioDrv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer resume function */ - HAL_I2S_DMAResume(&hAudioOutI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call DMA Stop to disable DMA stream before stopping codec */ - HAL_I2S_DMAStop(&hAudioOutI2s); - - /* Call Audio Codec Stop function */ - if(pAudioDrv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 1ms */ - HAL_Delay(1); - - /* Reset the pin */ - HAL_GPIO_WritePin(AUDIO_RESET_GPIO, AUDIO_RESET_PIN, GPIO_PIN_RESET); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(pAudioDrv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(pAudioDrv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @note This function modifies a global variable of the audio codec driver: OutputDev. - * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output Device function */ - if(pAudioDrv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Update the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - RCC_PeriphCLKInitTypeDef rccclkinit; - - /* Enable PLLI2S clock */ - HAL_RCCEx_GetPeriphCLKConfig(&rccclkinit); - /* PLLI2S_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - if ((AudioFreq & 0x7) == 0) - { - /* Audio frequency multiple of 8 (8/16/32/48/96/192) */ - /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN = 192 Mhz */ - /* I2SCLK = PLLI2S_VCO Output/PLLI2SR = 192/6 = 32 Mhz */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = 192; - rccclkinit.PLLI2S.PLLI2SR = 6; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } - else - { - /* Other Frequency (11.025/22.500/44.100) */ - /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN = 290 Mhz */ - /* I2SCLK = PLLI2S_VCO Output/PLLI2SR = 290/2 = 145 Mhz */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SN = 290; - rccclkinit.PLLI2S.PLLI2SR = 2; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } - - /* Update the I2S audio frequency configuration */ - I2S3_Init(AudioFreq); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Call the user function which will manage directly transfer complete */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); - } -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if(hi2s->Instance == I2S3) - { - /* Manage the remaining file size and new address offset: This function should - be coded by user (its prototype is already declared in stm32f4_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); - } -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rccclkinit; - uint8_t index = 0, freqindex = 0xFF; - - for(index = 0; index < 8; index++) - { - if(I2SFreq[index] == AudioFreq) - { - freqindex = index; - } - } - /* Enable PLLI2S clock */ - HAL_RCCEx_GetPeriphCLKConfig(&rccclkinit); - /* PLLI2S_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - if ((freqindex & 0x7) == 0) - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SM = 8; - rccclkinit.PLLI2S.PLLI2SN = I2SPLLN[freqindex]; - rccclkinit.PLLI2S.PLLI2SR = I2SPLLR[freqindex]; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } - else - { - /* I2S clock config - PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) × (PLLI2SN/PLLM) - I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ - rccclkinit.PeriphClockSelection = RCC_PERIPHCLK_I2S; - rccclkinit.PLLI2S.PLLI2SM = 8; - rccclkinit.PLLI2S.PLLI2SN = 258; - rccclkinit.PLLI2S.PLLI2SR = 3; - HAL_RCCEx_PeriphCLKConfig(&rccclkinit); - } -} - -/** - * @brief AUDIO OUT I2S MSP Init. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2sTx; - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable I2S3 clock */ - I2S3_CLK_ENABLE(); - - /*** Configure the GPIOs ***/ - /* Enable I2S GPIO clocks */ - I2S3_SCK_SD_CLK_ENABLE(); - I2S3_WS_CLK_ENABLE(); - - /* I2S3 pins configuration: WS, SCK and SD pins ----------------------------*/ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = I2S3_SCK_SD_WS_AF; - HAL_GPIO_Init(I2S3_SCK_SD_GPIO_PORT, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = I2S3_WS_PIN ; - HAL_GPIO_Init(I2S3_WS_GPIO_PORT, &GPIO_InitStruct); - - /* I2S3 pins configuration: MCK pin */ - I2S3_MCK_CLK_ENABLE(); - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_Init(I2S3_MCK_GPIO_PORT, &GPIO_InitStruct); - - /* Enable the I2S DMA clock */ - I2S3_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == I2S3) - { - /* Configure the hdma_i2sTx handle parameters */ - hdma_i2sTx.Init.Channel = I2S3_DMAx_CHANNEL; - hdma_i2sTx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2sTx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sTx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sTx.Init.PeriphDataAlignment = I2S3_DMAx_PERIPH_DATA_SIZE; - hdma_i2sTx.Init.MemDataAlignment = I2S3_DMAx_MEM_DATA_SIZE; - hdma_i2sTx.Init.Mode = DMA_NORMAL; - hdma_i2sTx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sTx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_i2sTx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sTx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sTx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - hdma_i2sTx.Instance = I2S3_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2sTx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sTx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sTx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S3_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S3_DMAx_IRQ); -} - -/** - * @brief De-Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S3_DMAx_IRQ); - - if(hi2s->Instance == I2S3) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmatx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* CODEC_I2S pins configuration: SCK and SD pins */ - GPIO_InitStruct.Pin = I2S3_SCK_PIN | I2S3_SD_PIN; - HAL_GPIO_DeInit(I2S3_SCK_SD_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: WS pin */ - GPIO_InitStruct.Pin = I2S3_WS_PIN; - HAL_GPIO_DeInit(I2S3_WS_GPIO_PORT, GPIO_InitStruct.Pin); - - /* CODEC_I2S pins configuration: MCK pin */ - GPIO_InitStruct.Pin = I2S3_MCK_PIN; - HAL_GPIO_DeInit(I2S3_MCK_GPIO_PORT, GPIO_InitStruct.Pin); - - /* Disable I2S clock */ - I2S3_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (I2S). - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S3_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioOutI2s Instance parameter */ - hAudioOutI2s.Instance = I2S3; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioOutI2s); - - /* I2S3 peripheral configuration */ - hAudioOutI2s.Init.AudioFreq = AudioFreq; - hAudioOutI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioOutI2s.Init.CPOL = I2S_CPOL_LOW; - hAudioOutI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioOutI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - hAudioOutI2s.Init.Mode = I2S_MODE_MASTER_TX; - hAudioOutI2s.Init.Standard = I2S_STANDARD; - - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioOutI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} - -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_IN_Private_Functions STM32F411EDISCOVERY AUDIO IN Private Functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - * @param BitRes: Audio Bit resolution. - * @param ChnlNbr: Audio Channel number. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - /* Configure PLL clock */ - BSP_AUDIO_IN_ClockConfig(&hAudioInI2s, AudioFreq, NULL); - - /* Configure the PDM library */ - /* On STM32F411E-Discovery a single microphone is mounted, samples are duplicated - to make stereo audio streams */ - PDMDecoder_Init(AudioFreq, ChnlNbr, 2); - - /* Configure the I2S peripheral */ - hAudioInI2s.Instance = I2S2; - if(HAL_I2S_GetState(&hAudioInI2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_IN_MspInit(&hAudioInI2s, NULL); - } - - /* Configure the I2S2 */ - I2S2_Init(AudioFreq); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pbuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size) -{ - uint32_t ret = AUDIO_ERROR; - - /* Start the process receive DMA */ - HAL_I2S_Receive_DMA(&hAudioInI2s, pbuf, size); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Stops audio recording. - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - uint32_t ret = AUDIO_ERROR; - - /* Call the Media layer pause function */ - HAL_I2S_DMAStop(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - ret = AUDIO_OK; - - return ret; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - /* Call the Media layer pause/resume function */ - HAL_I2S_DMAResume(&hAudioInI2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Converts audio format from PDM to PCM. - * @param PDMBuf: Pointer to data PDM buffer - * @param PCMBuf: Pointer to data PCM buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf) -{ - uint16_t AppPDM[INTERNAL_BUFF_SIZE/2]; - uint32_t index = 0; - - /* PDM Demux */ - for(index = 0; indexInstance == I2S2) - { - /* Configure the hdma_i2sRx handle parameters */ - hdma_i2sRx.Init.Channel = I2S2_DMAx_CHANNEL; - hdma_i2sRx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2sRx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2sRx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2sRx.Init.PeriphDataAlignment = I2S2_DMAx_PERIPH_DATA_SIZE; - hdma_i2sRx.Init.MemDataAlignment = I2S2_DMAx_MEM_DATA_SIZE; - hdma_i2sRx.Init.Mode = DMA_CIRCULAR; - hdma_i2sRx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2sRx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2sRx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2sRx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2sRx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2sRx.Instance = I2S2_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmarx, hdma_i2sRx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2sRx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2sRx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(I2S2_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(I2S2_DMAx_IRQ); -} - -/** - * @brief DeInitializes BSP_AUDIO_IN MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(I2S2_DMAx_IRQ); - - if(hi2s->Instance == I2S2) - { - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(hi2s->hdmarx); - } - - /* Disable I2S block */ - __HAL_I2S_DISABLE(hi2s); - - /* Disable pins: SCK and SD pins */ - gpio_init_structure.Pin = I2S2_SCK_PIN; - HAL_GPIO_DeInit(I2S2_SCK_GPIO_PORT, gpio_init_structure.Pin); - gpio_init_structure.Pin = I2S2_MOSI_PIN; - HAL_GPIO_DeInit(I2S2_MOSI_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - I2S2_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the applic - by surcgarging this __weak function */ -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the PDM library. - * @param AudioFreq: Audio sampling frequency - * @param ChnlNbrIn: Number of input audio channels in the PDM buffer - * @param ChnlNbrOut: Number of desired output audio channels in the resulting PCM buffer - * Number of audio channels (1: mono; 2: stereo) - */ -static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbrIn, uint32_t ChnlNbrOut) -{ - uint32_t index = 0; - - /* Enable CRC peripheral to unlock the PDM library */ - __HAL_RCC_CRC_CLK_ENABLE(); - - for(index = 0; index < ChnlNbrIn; index++) - { - /* Init PDM filters */ - PDM_FilterHandler[index].bit_order = PDM_FILTER_BIT_ORDER_LSB; - PDM_FilterHandler[index].endianness = PDM_FILTER_ENDIANNESS_LE; - PDM_FilterHandler[index].high_pass_tap = 2122358088; - PDM_FilterHandler[index].out_ptr_channels = ChnlNbrOut; - PDM_FilterHandler[index].in_ptr_channels = ChnlNbrIn; - PDM_Filter_Init((PDM_Filter_Handler_t *)(&PDM_FilterHandler[index])); - - /* PDM lib config phase */ - PDM_FilterConfig[index].output_samples_number = AudioFreq/1000; - PDM_FilterConfig[index].mic_gain = 24; - PDM_FilterConfig[index].decimation_factor = PDM_FILTER_DEC_FACTOR_64; - PDM_Filter_setConfig((PDM_Filter_Handler_t *)&PDM_FilterHandler[index], &PDM_FilterConfig[index]); - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock (through PLL_R in - * Devices RevA/Z and through dedicated PLLI2S_R in Devices RevB/Y) - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static uint8_t I2S2_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - hAudioInI2s.Instance = I2S2; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&hAudioInI2s); - - /* I2S2 peripheral configuration */ - hAudioInI2s.Init.AudioFreq = 2 * AudioFreq; - hAudioInI2s.Init.ClockSource = I2S_CLOCK_PLL; - hAudioInI2s.Init.CPOL = I2S_CPOL_HIGH; - hAudioInI2s.Init.DataFormat = I2S_DATAFORMAT_16B; - hAudioInI2s.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - hAudioInI2s.Init.Mode = I2S_MODE_MASTER_RX; - hAudioInI2s.Init.Standard = I2S_STANDARD_LSB; - - /* Initialize the I2S peripheral with the structure above */ - if(HAL_I2S_Init(&hAudioInI2s) != HAL_OK) - { - return AUDIO_ERROR; - } - else - { - return AUDIO_OK; - } -} -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_IN_OUT_Private_Functions STM32F411E DISCOVERY AUDIO IN OUT Private Functions - * @{ - */ - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the error generated on DMA FIFO: This function - should be coded by user (its prototype is already declared in stm32f411e_discovery_audio.h) */ - if(hi2s->Instance == I2S3) - { - BSP_AUDIO_OUT_Error_CallBack(); - } - if(hi2s->Instance == I2S2) - { - BSP_AUDIO_IN_Error_Callback(); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.h b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.h deleted file mode 100644 index ed70550c63..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_audio.h +++ /dev/null @@ -1,253 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * stm32f411e_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F411E_DISCOVERY_AUDIO_H -#define __STM32F411E_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/cs43l22/cs43l22.h" -#include "stm32f411e_discovery.h" -#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/Inc/pdm2pcm_glo.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY_AUDIO - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Exported_Types STM32F411E DISCOVERY AUDIO Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_OUT_Exported_Constants STM32F411E DISCOVERY AUDIO OUT Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - AUDIO OUT CONFIGURATION -------------------------------------------------------------------------------*/ - -/* I2S peripheral configuration defines */ -#define I2S3 SPI3 -#define I2S3_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define I2S3_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() -#define I2S3_SCK_SD_WS_AF GPIO_AF6_SPI3 -#define I2S3_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S3_WS_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define I2S3_WS_PIN GPIO_PIN_4 -#define I2S3_SCK_PIN GPIO_PIN_10 -#define I2S3_SD_PIN GPIO_PIN_12 -#define I2S3_MCK_PIN GPIO_PIN_7 -#define I2S3_SCK_SD_GPIO_PORT GPIOC -#define I2S3_WS_GPIO_PORT GPIOA -#define I2S3_MCK_GPIO_PORT GPIOC - -/* I2S DMA Stream definitions */ -#define I2S3_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S3_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S3_DMAx_STREAM DMA1_Stream7 -#define I2S3_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S3_DMAx_IRQ DMA1_Stream7_IRQn -#define I2S3_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S3_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SZE 0xFFFF - -#define I2S3_IRQHandler DMA1_Stream7_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO 0x0E /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define I2S2 SPI2 -#define I2S2_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() -#define I2S2_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() -#define I2S2_SCK_PIN GPIO_PIN_10 -#define I2S2_SCK_GPIO_PORT GPIOB -#define I2S2_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define I2S2_SCK_AF GPIO_AF5_SPI2 - -#define I2S2_MOSI_PIN GPIO_PIN_3 -#define I2S2_MOSI_GPIO_PORT GPIOC -#define I2S2_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define I2S2_MOSI_AF GPIO_AF5_SPI2 - -/* I2S DMA Stream Rx definitions */ -#define I2S2_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define I2S2_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define I2S2_DMAx_STREAM DMA1_Stream3 -#define I2S2_DMAx_CHANNEL DMA_CHANNEL_0 -#define I2S2_DMAx_IRQ DMA1_Stream3_IRQn -#define I2S2_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define I2S2_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define I2S2_IRQHandler DMA1_Stream3_IRQHandler - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK 0 -#define AUDIO_ERROR 1 -#define AUDIO_TIMEOUT 2 - -/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION 16 -#define DEFAULT_AUDIO_IN_CHANNEL_NBR 1 /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME 64 - -/* PDM buffer input size */ -#define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR -/* PCM buffer output size */ -#define PCM_OUT_SIZE DEFAULT_AUDIO_IN_FREQ/1000 -#define CHANNEL_DEMUX_MASK 0x55 - -/*------------------------------------------------------------------------------ - OPTIONAL Configuration defines parameters -------------------------------------------------------------------------------*/ - -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Exported_Variables STM32F411E DISCOVERY AUDIO Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_Exported_Macros STM32F411E DISCOVERY AUDIO Exported Macros - * @{ - */ -#define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE) -#define HTONS(A) ((((uint16_t)(A) & 0xff00) >> 8) | (((uint16_t)(A) & 0x00ff) << 8)) -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_OUT_Exported_Functions STM32F411E DISCOVERY AUDIO OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t *pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred. */ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_AUDIO_IN_Exported_Functions STM32F411E DISCOVERY AUDIO IN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf); -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F411E_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.c b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.c deleted file mode 100644 index 67dddd6d08..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.c +++ /dev/null @@ -1,272 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery_gyroscope.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the - * MEMS gyroscope available on STM32F411E-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32f411e_discovery_gyroscope.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE STM32F411E DISCOVERY GYROSCOPE - * @{ - */ - - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_TypesDefinitions STM32F411E DISCOVERY GYROSCOPE Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_Defines STM32F411E DISCOVERY GYROSCOPE Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_Macros STM32F411E DISCOVERY GYROSCOPE Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_Variables STM32F411E DISCOVERY GYROSCOPE Private Variables - * @{ - */ -static GYRO_DrvTypeDef *GyroscopeDrv; -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_FunctionPrototypes STM32F411E DISCOVERY GYROSCOPE Private FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Private_Functions STM32F411E DISCOVERY GYROSCOPE Private Functions - * @{ - */ - -/** - * @brief Set gyroscope Initialization. - * @retval GYRO_OK if no problem during initialization - */ -uint8_t BSP_GYRO_Init(void) -{ - uint8_t ret = GYRO_ERROR; - uint16_t ctrl = 0x0000; - GYRO_InitTypeDef Gyro_InitStructure; - GYRO_FilterConfigTypeDef Gyro_FilterStructure = {0,0}; - - if((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR)) - { - /* Initialize the gyroscope driver structure */ - GyroscopeDrv = &L3gd20Drv; - - /* MEMS configuration ----------------------------------------------------*/ - /* Fill the gyroscope structure */ - Gyro_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE; - Gyro_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARATE_1; - Gyro_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE; - Gyro_InitStructure.Band_Width = L3GD20_BANDWIDTH_4; - Gyro_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous; - Gyro_InitStructure.Endianness = L3GD20_BLE_LSB; - Gyro_InitStructure.Full_Scale = L3GD20_FULLSCALE_500; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl = (uint16_t) (Gyro_InitStructure.Power_Mode | Gyro_InitStructure.Output_DataRate | \ - Gyro_InitStructure.Axes_Enable | Gyro_InitStructure.Band_Width); - - ctrl |= (uint16_t) ((Gyro_InitStructure.BlockData_Update | Gyro_InitStructure.Endianness | \ - Gyro_InitStructure.Full_Scale) << 8); - - /* Initialize the gyroscope */ - GyroscopeDrv->Init(ctrl); - - Gyro_FilterStructure.HighPassFilter_Mode_Selection = L3GD20_HPM_NORMAL_MODE_RES; - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0; - - ctrl = (uint8_t) ((Gyro_FilterStructure.HighPassFilter_Mode_Selection |\ - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency)); - - /* Configure the gyroscope main parameters */ - GyroscopeDrv->FilterConfig(ctrl); - - GyroscopeDrv->FilterCmd(L3GD20_HIGHPASSFILTER_ENABLE); - - ret = GYRO_OK; - } - else if (I3g4250Drv.ReadID() == I_AM_I3G4250D) - { - /* Initialize the gyroscope driver structure */ - GyroscopeDrv = &I3g4250Drv; - - /* Configure Mems : data rate, power mode, full scale and axes */ - Gyro_InitStructure.Power_Mode = I3G4250D_MODE_ACTIVE; - Gyro_InitStructure.Output_DataRate = I3G4250D_OUTPUT_DATARATE_1; - Gyro_InitStructure.Axes_Enable = I3G4250D_AXES_ENABLE; - Gyro_InitStructure.Band_Width = I3G4250D_BANDWIDTH_4; - Gyro_InitStructure.BlockData_Update = I3G4250D_BlockDataUpdate_Continous; - Gyro_InitStructure.Endianness = I3G4250D_BLE_LSB; - Gyro_InitStructure.Full_Scale = I3G4250D_FULLSCALE_500; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl = (uint16_t) (Gyro_InitStructure.Power_Mode | Gyro_InitStructure.Output_DataRate | \ - Gyro_InitStructure.Axes_Enable | Gyro_InitStructure.Band_Width); - - ctrl |= (uint16_t) ((Gyro_InitStructure.BlockData_Update | Gyro_InitStructure.Endianness | \ - Gyro_InitStructure.Full_Scale) << 8); - - /* Initialize the gyroscope */ - GyroscopeDrv->Init(ctrl); - - Gyro_FilterStructure.HighPassFilter_Mode_Selection = I3G4250D_HPM_NORMAL_MODE_RES; - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency = I3G4250D_HPFCF_0; - - ctrl = (uint8_t) ((Gyro_FilterStructure.HighPassFilter_Mode_Selection |\ - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency)); - - /* Configure the gyroscope main parameters */ - GyroscopeDrv->FilterConfig(ctrl); - - GyroscopeDrv->FilterCmd(I3G4250D_HIGHPASSFILTER_ENABLE); - - ret = GYRO_OK; - } - - return ret; -} - -/** - * @brief Read ID of gyroscope component. - * @retval ID - */ -uint8_t BSP_GYRO_ReadID(void) -{ - uint8_t id = 0x00; - - if(GyroscopeDrv->ReadID != NULL) - { - id = GyroscopeDrv->ReadID(); - } - return id; -} - -/** - * @brief Reboot memory content of Gyroscope. - */ -void BSP_GYRO_Reset(void) -{ - if(GyroscopeDrv->Reset != NULL) - { - GyroscopeDrv->Reset(); - } -} - -/** - * @brief Configures INT1 interrupt. - * @param pIntConfig: pointer to a L3GD20_InterruptConfig_TypeDef - * structure that contains the configuration setting for the L3GD20 Interrupt. - */ -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfig) -{ - uint16_t interruptconfig = 0x0000; - - if(GyroscopeDrv->ConfigIT != NULL) - { - /* Configure latch Interrupt request and axe interrupts */ - interruptconfig |= ((uint8_t)(pIntConfig->Latch_Request| \ - pIntConfig->Interrupt_Axes) << 8); - - interruptconfig |= (uint8_t)(pIntConfig->Interrupt_ActiveEdge); - - GyroscopeDrv->ConfigIT(interruptconfig); - } -} - -/** - * @brief Enables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - */ -void BSP_GYRO_EnableIT(uint8_t IntPin) -{ - if(GyroscopeDrv->EnableIT != NULL) - { - GyroscopeDrv->EnableIT(IntPin); - } -} - -/** - * @brief Disables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - */ -void BSP_GYRO_DisableIT(uint8_t IntPin) -{ - if(GyroscopeDrv->DisableIT != NULL) - { - GyroscopeDrv->DisableIT(IntPin); - } -} - -/** - * @brief Get XYZ angular acceleration. - * @param pfData: pointer on floating array - */ -void BSP_GYRO_GetXYZ(float *pfData) -{ - if(GyroscopeDrv->GetXYZ!= NULL) - { - GyroscopeDrv->GetXYZ(pfData); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.h b/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.h deleted file mode 100644 index 4ea86409e8..0000000000 --- a/Drivers/BSP/STM32F411E-Discovery/stm32f411e_discovery_gyroscope.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f411e_discovery_gyroscope.h - * @author MCD Application Team - * @brief This file contains definitions for stm32f411e_discovery_gyroscope.c - * firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F411E_DISCOVERY_GYROSCOPE_H -#define __STM32F411E_DISCOVERY_GYROSCOPE_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f411e_discovery.h" - - /* Include Gyroscope component driver */ -#include "../Components/l3gd20/l3gd20.h" -#include "../Components/i3g4250d/i3g4250d.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F411E_DISCOVERY - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE STM32F411E DISCOVERY GYROSCOPE - * @{ - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Exported_Types STM32F411E DISCOVERY GYROSCOPE Exported Types - * @{ - */ -typedef enum -{ - GYRO_OK = 0, - GYRO_ERROR = 1, - GYRO_TIMEOUT = 2 -}GYRO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Exported_Constants STM32F411E DISCOVERY GYROSCOPE Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Exported_Macros STM32F411E DISCOVERY GYROSCOPE Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F411E_DISCOVERY_GYROSCOPE_Exported_Functions STM32F411E DISCOVERY GYROSCOPE Exported Functions - * @{ - */ -/* Gyroscope Functions */ -uint8_t BSP_GYRO_Init(void); -void BSP_GYRO_Reset(void); -uint8_t BSP_GYRO_ReadID(void); -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfigStruct); -void BSP_GYRO_EnableIT(uint8_t IntPin); -void BSP_GYRO_DisableIT(uint8_t IntPin); -void BSP_GYRO_GetXYZ(float *pfData); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus - } -#endif - -#endif /* __STM32F411E_DISCOVERY_GYROSCOPE_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery b/Drivers/BSP/STM32F413H-Discovery new file mode 160000 index 0000000000..77e1cfa1ff --- /dev/null +++ b/Drivers/BSP/STM32F413H-Discovery @@ -0,0 +1 @@ +Subproject commit 77e1cfa1ff984a054b635c26ff3be861eb82fd61 diff --git a/Drivers/BSP/STM32F413H-Discovery/LICENSE.md b/Drivers/BSP/STM32F413H-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F413H-Discovery/README.md b/Drivers/BSP/STM32F413H-Discovery/README.md deleted file mode 100644 index d04a26aaa2..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# BSP STM32F413H-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f413h-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f413h-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F413H-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f413h-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ft6x06](https://github.com/STMicroelectronics/stm32-ft6x06) -* [stm32-n25q128a](https://github.com/STMicroelectronics/stm32-n25q128a) -* [stm32-st7789h2](https://github.com/STMicroelectronics/stm32-st7789h2) -* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F413H-Discovery/Release_Notes.html b/Drivers/BSP/STM32F413H-Discovery/Release_Notes.html deleted file mode 100644 index 8958e0472f..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/Release_Notes.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - Release Notes for STM32F413H_DISCOVERY Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F413H_DISCOVERY Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F413H_DISCOVERY Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update to fix dependencies between ft3x67 and ft6x06 components
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
  • Update to support the ft3x67 component
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add general description of BSP drivers
  • -
  • Remove date & version
  • -
  • stm32f413h_discovery_lcd.c: -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release for STM32F413H_Discovery BSP drivers.
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F413H-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32F413H-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F413H-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F413H-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F413H-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F413H-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F413H-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F413H-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.c deleted file mode 100644 index a18db058a8..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.c +++ /dev/null @@ -1,902 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery.c - * @author MCD Application Team - * @brief This file provides a set of firmware functions to manage LEDs, - * push-buttons and COM ports available on STM32F413H-DISCOVERY board - * (MB1209) from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery.h" - - -/** @addtogroup BSP - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL STM32F413H-DISCOVERY LOW LEVEL - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32F413H Discovery Low Level Private Typedef - * @{ - */ -typedef struct -{ - __IO uint16_t REG; - __IO uint16_t RAM; -}LCD_CONTROLLER_TypeDef; -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Private_Defines STM32F413H Discovery Low Level Private Def - * @{ - */ -/** - * @brief STM32F413H DISCOVERY BSP Driver version number V1.0.4 - */ -#define __STM32F413H_DISCOVERY_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F413H_DISCOVERY_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM32F413H_DISCOVERY_BSP_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */ -#define __STM32F413H_DISCOVERY_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F413H_DISCOVERY_BSP_VERSION ((__STM32F413H_DISCOVERY_BSP_VERSION_MAIN << 24)\ - |(__STM32F413H_DISCOVERY_BSP_VERSION_SUB1 << 16)\ - |(__STM32F413H_DISCOVERY_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F413H_DISCOVERY_BSP_VERSION_RC)) - -/* We use BANK3 as we use FMC_NE3 signal */ -#define FMC_BANK3_BASE ((uint32_t)(0x60000000 | 0x08000000)) -#define FMC_BANK3 ((LCD_CONTROLLER_TypeDef *) FMC_BANK3_BASE) - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Private_Variables STM32F413H Discovery Low Level Variables - * @{ - */ - -const uint32_t GPIO_PIN[LEDn] = {LED3_PIN, - LED4_PIN}; - - -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED3_GPIO_PORT, - LED4_GPIO_PORT}; - - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT}; - -const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN}; - -const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn}; - -USART_TypeDef* COM_USART[COMn] = {DISCOVERY_COM1}; - -GPIO_TypeDef* COM_TX_PORT[COMn] = {DISCOVERY_COM1_TX_GPIO_PORT}; - -GPIO_TypeDef* COM_RX_PORT[COMn] = {DISCOVERY_COM1_RX_GPIO_PORT}; - -const uint16_t COM_TX_PIN[COMn] = {DISCOVERY_COM1_TX_PIN}; - -const uint16_t COM_RX_PIN[COMn] = {DISCOVERY_COM1_RX_PIN}; - -const uint16_t COM_TX_AF[COMn] = {DISCOVERY_COM1_TX_AF}; - -const uint16_t COM_RX_AF[COMn] = {DISCOVERY_COM1_RX_AF}; - -static FMPI2C_HandleTypeDef hI2cAudioHandler; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32F413H Discovery Low Level Private Prototypes - * @{ - */ -static void FMPI2Cx_Init(FMPI2C_HandleTypeDef *i2c_handler); -static void FMPI2Cx_DeInit(FMPI2C_HandleTypeDef *i2c_handler); - -static HAL_StatusTypeDef FMPI2Cx_ReadMultiple(FMPI2C_HandleTypeDef *fmpi2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static HAL_StatusTypeDef FMPI2Cx_WriteMultiple(FMPI2C_HandleTypeDef *fmpi2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length); -static void FMPI2Cx_Error(FMPI2C_HandleTypeDef *fmpi2c_handler, uint8_t Addr); - -static void FMC_BANK3_WriteData(uint16_t Data); -static void FMC_BANK3_WriteReg(uint8_t Reg); -static uint16_t FMC_BANK3_ReadData(void); -static void FMC_BANK3_Init(void); -static void FMC_BANK3_MspInit(void); - -/* LCD IO functions */ -void LCD_IO_Init(void); -void LCD_IO_WriteData(uint16_t RegValue); -void LCD_IO_WriteReg(uint8_t Reg); -void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size); -uint16_t LCD_IO_ReadData(void); -void LCD_IO_Delay(uint32_t Delay); - -/* AUDIO IO functions */ -void AUDIO_IO_Init(void); -void AUDIO_IO_DeInit(void); -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value); -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg); -void AUDIO_IO_Delay(uint32_t Delay); - -/* TouchScreen (TS) IO functions */ -void TS_IO_Init(void); -void TS_IO_DeInit(void); -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value); -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg); -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length); -void TS_IO_Delay(uint32_t Delay); - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Private_Functions STM32F413H Discovery Low Level Private Functions - * @{ - */ - -/** - * @brief This method returns the STM32F413H DISCOVERY BSP Driver revision - * @retval version: 0xXYZR (8bits for each decimal, R for RC) - */ -uint32_t BSP_GetVersion(void) -{ - return __STM32F413H_DISCOVERY_BSP_VERSION; -} - -/** - * @brief Configures LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Init(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - LEDx_GPIO_CLK_ENABLE(Led); - /* Configure the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - - HAL_GPIO_Init(GPIO_PORT[Led], &gpio_init_structure); -} - -/** - * @brief DeInit LEDs. - * @param Led: LED to be configured. - * This parameter can be one of the following values: - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_DeInit(Led_TypeDef Led) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* DeInit the GPIO_LED pin */ - gpio_init_structure.Pin = GPIO_PIN[Led]; - - /* Turn off LED */ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); - HAL_GPIO_DeInit(GPIO_PORT[Led], gpio_init_structure.Pin); -} - -/** - * @brief Turns selected LED On. - * @param Led: LED to be set on - * This parameter can be one of the following values: - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_On(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_SET); -} - -/** - * @brief Turns selected LED Off. - * @param Led: LED to be set off - * This parameter can be one of the following values: - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Off(Led_TypeDef Led) -{ - HAL_GPIO_WritePin(GPIO_PORT[Led], GPIO_PIN[Led], GPIO_PIN_RESET); -} - -/** - * @brief Toggles the selected LED. - * @param Led: LED to be toggled - * This parameter can be one of the following values: - * @arg LED3 - * @arg LED4 - */ -void BSP_LED_Toggle(Led_TypeDef Led) -{ - HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]); -} - -/** - * @brief Configures button GPIO and EXTI Line. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @param ButtonMode: Button mode - * This parameter can be one of the following values: - * @arg BUTTON_MODE_GPIO: Button will be used as simple IO - * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line - * with interrupt generation capability - */ -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable the BUTTON clock */ - WAKEUP_BUTTON_GPIO_CLK_ENABLE(); - - if(ButtonMode == BUTTON_MODE_GPIO) - { - /* Configure Button pin as input */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLDOWN; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - } - - if(ButtonMode == BUTTON_MODE_EXTI) - { - /* Configure Button pin as input with External interrupt */ - gpio_init_structure.Pin = BUTTON_PIN[Button]; - gpio_init_structure.Pull = GPIO_PULLDOWN; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - - gpio_init_structure.Mode = GPIO_MODE_IT_RISING; - - HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure); - - /* Enable and set Button EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - } -} - -/** - * @brief Push Button DeInit. - * @param Button: Button to be configured - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @note PB DeInit does not disable the GPIO clock - */ -void BSP_PB_DeInit(Button_TypeDef Button) -{ - GPIO_InitTypeDef gpio_init_structure; - - gpio_init_structure.Pin = BUTTON_PIN[Button]; - HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button])); - HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin); -} - - -/** - * @brief Returns the selected button state. - * @param Button: Button to be checked - * This parameter can be one of the following values: - * @arg BUTTON_WAKEUP: Wakeup Push Button - * @retval The Button GPIO pin value (GPIO_PIN_RESET = button pressed) - */ -uint32_t BSP_PB_GetState(Button_TypeDef Button) -{ - return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]); -} - -/** - * @brief Configures COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIO clock */ - DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(COM); - DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(COM); - - /* Enable USART clock */ - DISCOVERY_COMx_CLK_ENABLE(COM); - - /* Configure USART Tx as alternate function */ - gpio_init_structure.Pin = COM_TX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Alternate = COM_TX_AF[COM]; - HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure); - - /* Configure USART Rx as alternate function */ - gpio_init_structure.Pin = COM_RX_PIN[COM]; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Alternate = COM_RX_AF[COM]; - HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure); - - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_Init(huart); -} - -/** - * @brief DeInit COM port. - * @param COM: COM port to be configured. - * This parameter can be one of the following values: - * @arg COM1 - * @param huart: Pointer to a UART_HandleTypeDef structure that contains the - * configuration information for the specified USART peripheral. - */ -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart) -{ - /* USART configuration */ - huart->Instance = COM_USART[COM]; - HAL_UART_DeInit(huart); - - /* Enable USART clock */ - DISCOVERY_COMx_CLK_DISABLE(COM); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - - -/******************************************************************************* - BUS OPERATIONS -*******************************************************************************/ - -/******************************* I2C Routines *********************************/ -/** - * @brief Initializes FMPI2C MSP. - * @param fmpi2c_handler : FMPI2C handler - */ -static void FMPI2Cx_MspInit(FMPI2C_HandleTypeDef *fmpi2c_handler) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* AUDIO FMPI2C MSP init */ - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_OD; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /* Configure I2C Rx as alternate function */ - gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN; - gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure); - - /*** Configure the I2C peripheral ***/ - /* Enable I2C clock */ - DISCOVERY_AUDIO_I2Cx_CLK_ENABLE(); - - /* Force the I2C peripheral clock reset */ - DISCOVERY_AUDIO_I2Cx_FORCE_RESET(); - - /* Release the I2C peripheral clock reset */ - DISCOVERY_AUDIO_I2Cx_RELEASE_RESET(); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_EV_IRQn); - - /* Enable and set I2Cx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn); -} - -/** - * @brief Initializes FMPI2C HAL. - * @param fmpi2c_handler : FMPI2C handler - */ -static void FMPI2Cx_Init(FMPI2C_HandleTypeDef *fmpi2c_handler) -{ - if(HAL_FMPI2C_GetState(fmpi2c_handler) == HAL_FMPI2C_STATE_RESET) - { - /* Audio FMPI2C configuration */ - fmpi2c_handler->Instance = DISCOVERY_AUDIO_I2Cx; - fmpi2c_handler->Init.Timing = DISCOVERY_I2Cx_TIMING; - fmpi2c_handler->Init.OwnAddress1 = 0; - fmpi2c_handler->Init.AddressingMode = FMPI2C_ADDRESSINGMODE_7BIT; - fmpi2c_handler->Init.DualAddressMode = FMPI2C_DUALADDRESS_DISABLE; - fmpi2c_handler->Init.OwnAddress2 = 0; - fmpi2c_handler->Init.OwnAddress2Masks = FMPI2C_OA2_NOMASK; - fmpi2c_handler->Init.GeneralCallMode = FMPI2C_GENERALCALL_DISABLE; - fmpi2c_handler->Init.NoStretchMode = FMPI2C_NOSTRETCH_DISABLE; - /* Init the FMPI2C */ - FMPI2Cx_MspInit(fmpi2c_handler); - HAL_FMPI2C_Init(fmpi2c_handler); - } -} - -/** - * @brief Reads multiple data. - * @param fmpi2c_handler : FMPI2C handler - * @param Addr: I2C address - * @param Reg: Reg address - * @param MemAddress: Memory address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -static HAL_StatusTypeDef FMPI2Cx_ReadMultiple(FMPI2C_HandleTypeDef *fmpi2c_handler, - uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_FMPI2C_Mem_Read(fmpi2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* FMPI2C error occurred */ - FMPI2Cx_Error(fmpi2c_handler, Addr); - } - return status; -} - -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param fmpi2c_handler : FMPI2C handler - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param MemAddress: Memory address - * @param Buffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef FMPI2Cx_WriteMultiple(FMPI2C_HandleTypeDef *fmpi2c_handler, - uint8_t Addr, - uint16_t Reg, - uint16_t MemAddress, - uint8_t *Buffer, - uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_FMPI2C_Mem_Write(fmpi2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000); - - /* Check the communication status */ - if(status != HAL_OK) - { - /* Re-Initialize the FMPI2C Bus */ - FMPI2Cx_Error(fmpi2c_handler, Addr); - } - return status; -} - -/** - * @brief Manages error callback by re-initializing I2C. - * @param fmpi2c_handler : FMPI2C handler - * @param Addr: I2C Address - * @retval None - */ -static void FMPI2Cx_Error(FMPI2C_HandleTypeDef *fmpi2c_handler, uint8_t Addr) -{ - /* De-initialize the FMPI2C communication bus */ - HAL_FMPI2C_DeInit(fmpi2c_handler); - - /* Re-Initialize the FMPI2C communication bus */ - FMPI2Cx_Init(fmpi2c_handler); -} - -/** - * @brief Deinitializes FMPI2C interface - * @param fmpi2c_handler : FMPI2C handler - */ - static void FMPI2Cx_DeInit(FMPI2C_HandleTypeDef *fmpi2c_handler) -{ - /* Audio and LCD I2C configuration */ - fmpi2c_handler->Instance = DISCOVERY_AUDIO_I2Cx; - /* Disable FMPI2C block */ - __HAL_FMPI2C_DISABLE(fmpi2c_handler); - - /* DeInit the FMPI2C */ - HAL_FMPI2C_DeInit(fmpi2c_handler); -} -/*************************** FMC Routines ************************************/ -/** - * @brief Initializes FMC_BANK3 MSP. - */ -static void FMC_BANK3_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable FSMC clock */ - __HAL_RCC_FSMC_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FSMC; - - /* GPIOD configuration: GPIO_PIN_7 is FMC_NE1 , GPIO_PIN_11 ans GPIO_PIN_12 are PSRAM_A16 and PSRAM_A17 */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_8 |\ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15 | GPIO_PIN_7|\ - GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 |\ - GPIO_PIN_12 |GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_10 ; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); -} - -/** - * @brief Initializes LCD IOs. - */ -static void FMC_BANK3_Init(void) -{ - SRAM_HandleTypeDef hsram; - FSMC_NORSRAM_TimingTypeDef sram_timing; - - /* Initialize the SRAM controller */ - FMC_BANK3_MspInit(); - - /*** Configure the SRAM Bank 1 ***/ - /* Configure IPs */ - hsram.Instance = FSMC_NORSRAM_DEVICE; - hsram.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - - /* Timing config */ - sram_timing.AddressSetupTime = 3; - sram_timing.AddressHoldTime = 1; - sram_timing.DataSetupTime = 4; - sram_timing.BusTurnAroundDuration = 1; - sram_timing.CLKDivision = 2; - sram_timing.DataLatency = 2; - sram_timing.AccessMode = FSMC_ACCESS_MODE_A; - - hsram.Init.NSBank = FSMC_NORSRAM_BANK3; - hsram.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - hsram.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - hsram.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; - hsram.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; - hsram.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - hsram.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - hsram.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - hsram.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - hsram.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - hsram.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE; - hsram.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - hsram.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; - hsram.Init.WriteFifo = FSMC_WRITE_FIFO_DISABLE; - hsram.Init.PageSize = FSMC_PAGE_SIZE_NONE; - hsram.Init.ContinuousClock = FSMC_CONTINUOUS_CLOCK_SYNC_ONLY; - - HAL_SRAM_Init(&hsram, &sram_timing, &sram_timing); -} - -/** - * @brief Writes register value. - * @param Data: Data to be written - */ -static void FMC_BANK3_WriteData(uint16_t Data) -{ - /* Write 16-bit Reg */ - FMC_BANK3->RAM = Data; - __DSB(); -} - -/** - * @brief Writes register address. - * @param Reg: Register to be written - */ -static void FMC_BANK3_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then write register */ - FMC_BANK3->REG = Reg; - __DSB(); -} - -/** - * @brief Reads register value. - * @retval Read value - */ -static uint16_t FMC_BANK3_ReadData(void) -{ - return FMC_BANK3->RAM; -} - -/******************************************************************************* - LINK OPERATIONS -*******************************************************************************/ - -/********************************* LINK LCD ***********************************/ -/** - * @brief Initializes LCD low level. - */ -void LCD_IO_Init(void) -{ - FMC_BANK3_Init(); -} - -/** - * @brief Writes data on LCD data register. - * @param RegValue: Data to be written - */ -void LCD_IO_WriteData(uint16_t RegValue) -{ - /* Write 16-bit Reg */ - FMC_BANK3_WriteData(RegValue); -} - -/** - * @brief Writes several data on LCD data register. - * @param pData: pointer on data to be written - * @param Size: data amount in 16bits short unit - */ -void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size) -{ - uint32_t i; - - for (i = 0; i < Size; i++) - { - FMC_BANK3_WriteData(pData[i]); - } -} - -/** - * @brief Writes register on LCD register. - * @param Reg: Register to be written - */ -void LCD_IO_WriteReg(uint8_t Reg) -{ - /* Write 16-bit Index, then Write Reg */ - FMC_BANK3_WriteReg(Reg); -} - -/** - * @brief Reads data from LCD data register. - * @retval Read data. - */ -uint16_t LCD_IO_ReadData(void) -{ - return FMC_BANK3_ReadData(); -} - -/** - * @brief LCD delay - * @param Delay: Delay in ms - */ -void LCD_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK AUDIO *********************************/ - -/** - * @brief Initializes Audio low level. - */ -void AUDIO_IO_Init(void) -{ - FMPI2Cx_Init(&hI2cAudioHandler); -} - -/** - * @brief Deinitializes Audio low level. - */ -void AUDIO_IO_DeInit(void) -{ - FMPI2Cx_DeInit(&hI2cAudioHandler); -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value) -{ - uint16_t tmp = Value; - - Value = ((uint16_t)(tmp >> 8) & 0x00FF); - - Value |= ((uint16_t)(tmp << 8)& 0xFF00); - - FMPI2Cx_WriteMultiple(&hI2cAudioHandler, Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @retval Data to be read - */ -uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg) -{ - uint16_t read_value = 0, tmp = 0; - - FMPI2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, FMPI2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2); - - tmp = ((uint16_t)(read_value >> 8) & 0x00FF); - - tmp |= ((uint16_t)(read_value << 8)& 0xFF00); - - read_value = tmp; - - return read_value; -} - -/** - * @brief Reads multiple data with I2C communication - * channel from TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - * @retval Number of read data - */ -uint16_t TS_IO_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - return FMPI2Cx_ReadMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief Writes multiple data with I2C communication - * channel from MCU to TouchScreen. - * @param Addr: I2C address - * @param Reg: Register address - * @param Buffer: Pointer to data buffer - * @param Length: Length of the data - */ -void TS_IO_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length) -{ - FMPI2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, Buffer, Length); -} - -/** - * @brief AUDIO Codec delay - * @param Delay: Delay in ms - */ -void AUDIO_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************** LINK TS (TouchScreen) *****************************/ - -/** - * @brief Initializes TS low level. - */ -void TS_IO_Init(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - TS_RESET_GPIO_CLK_ENABLE(); - - /* Configure Button pin as input */ - gpio_init_structure.Pin = TS_RESET_PIN; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(TS_RESET_GPIO_PORT, &gpio_init_structure); - - FMPI2Cx_Init(&hI2cAudioHandler); -} - -/** - * @brief Deinitializes TS low level. - */ -void TS_IO_DeInit(void) -{ - FMPI2Cx_DeInit(&hI2cAudioHandler); -} - -/** - * @brief Reads a single data. - * @param Addr: I2C address - * @param Reg: Register address - * @retval Data to be read - */ -uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg) -{ - uint8_t read_value = 0; - - FMPI2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); - - return read_value; -} - -/** - * @brief Writes a single data. - * @param Addr: I2C address - * @param Reg: Reg address - * @param Value: Data to be written - */ -void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - FMPI2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1); -} - -/** - * @brief Delay function used in TouchScreen low level driver. - * @param Delay: Delay in ms - */ -void TS_IO_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.h deleted file mode 100644 index fe10db1452..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery.h +++ /dev/null @@ -1,287 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32F413H_DISCOVERY's LEDs, - * push-buttons and COM ports hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* IMPORTANT: One of the following flags must be defined in the preprocessor */ -/* options in order to select the target board revision: !!!!!!!!!! */ -/* USE_STM32F413H_DISCOVERY */ /* Applicable for all boards execept STM32F413H DISCOVERY REVE */ -/* USE_STM32F413H_DISCOVERY_REVE */ /* Applicable only for STM32F413H DISCOVERY REVE */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_H -#define __STM32F413H_DISCOVERY_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Exported_Types STM32F413H DISCOVERY Low Level Exported Types - * @{ - */ -typedef enum -{ -LED3 = 0, -LED_GREEN = LED3, -LED4 = 1, -LED_RED = LED4, -}Led_TypeDef; - - -typedef enum -{ - BUTTON_WAKEUP = 0 -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - COM1 = 0, -}COM_TypeDef; -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Exported_Constants STM32F413H DISCOVERY Low Level Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F413H_DISCOVERY board - */ -#if !defined(USE_STM32F413H_DISCOVERY_REVE) && \ - !defined(USE_STM32F413H_DISCOVERY) -#define USE_STM32F413H_DISCOVERY -#endif -/** @addtogroup STM32F413H_DISCOVERY_LOW_LEVEL_LED STM32F413H DISCOVERY Low Level Led - * @{ - */ -#define LEDn ((uint8_t)2) - -#define LED4_GPIO_PORT GPIOE -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() - -#define LED3_GPIO_PORT GPIOC -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() - -#define LED4_PIN GPIO_PIN_3 -#define LED3_PIN GPIO_PIN_5 - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED4_GPIO_CLK_ENABLE(); \ - }while(0) - -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED4_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @addtogroup STM32F413H_DISCOVERY_LOW_LEVEL_BUTTON STM32F413H DISCOVERY Low Level Button - * @{ - */ -/* Only one User/Wakeup button */ -#define BUTTONn ((uint8_t)1) - -/** - * @brief Wakeup push-button - */ -#define WAKEUP_BUTTON_PIN GPIO_PIN_0 -#define WAKEUP_BUTTON_GPIO_PORT GPIOA -#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define WAKEUP_BUTTON_EXTI_IRQn EXTI0_IRQn - -/** - * @} - */ - -/** @addtogroup STM32F413H_DISCOVERY_LOW_LEVEL_SIGNAL - * @{ - */ -/** - * @brief SD-detect signal - */ -#define SD_DETECT_PIN GPIO_PIN_11 -#define SD_DETECT_GPIO_PORT GPIOF -#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define SD_DETECT_EXTI_IRQn EXTI15_10_IRQn - - -/** - * @brief TS INT pin - */ -#define TS_INT_PIN GPIO_PIN_1 -#define TS_INT_GPIO_PORT GPIOC -#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define TS_INT_EXTI_IRQn EXTI1_IRQn - -/** - * @brief TS RST pin - */ -#define TS_RESET_PIN GPIO_PIN_13 -#define TS_RESET_GPIO_PORT GPIOB -#define TS_RESET_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define TS_RESET_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define TS_RESET_EXTI_IRQn EXTI15_10_IRQn - -/** - * @} - */ - -/** @addtogroup STM32F413H_DISCOVERY_LOW_LEVEL_COM STM32F413H DISCOVERY Low Level COM - * @{ - */ -#define COMn ((uint8_t)1) - -/** - * @brief Definition for COM port1, connected to USART6 - */ -#define DISCOVERY_COM1 USART6 -#define DISCOVERY_COM1_CLK_ENABLE() __HAL_RCC_USART6_CLK_ENABLE() -#define DISCOVERY_COM1_CLK_DISABLE() __HAL_RCC_USART6_CLK_DISABLE() - -#define DISCOVERY_COM1_TX_PIN GPIO_PIN_14 -#define DISCOVERY_COM1_TX_GPIO_PORT GPIOG -#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define DISCOVERY_COM1_TX_AF GPIO_AF8_USART6 - -#define DISCOVERY_COM1_RX_PIN GPIO_PIN_9 -#define DISCOVERY_COM1_RX_GPIO_PORT GPIOG -#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define DISCOVERY_COM1_RX_AF GPIO_AF8_USART6 - -#define DISCOVERY_COM1_IRQn USART6_IRQn - -#define DISCOVERY_COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_CLK_DISABLE() : 0) - -#define DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_TX_GPIO_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() : 0) - -#define DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) {DISCOVERY_COM1_RX_GPIO_CLK_ENABLE();} } while(0) -#define DISCOVERY_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() : 0) - -/* Exported constant IO ------------------------------------------------------*/ - -#define AUDIO_I2C_ADDRESS ((uint16_t)0x34) -#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0) -#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6) -#define TS_I2C_ADDRESS ((uint16_t)0x70) - -/* User can use this section to tailor I2Cx/I2Cx instance used and associated - resources */ -/* Definition for AUDIO I2Cx resources */ -#define DISCOVERY_AUDIO_I2Cx FMPI2C1 -#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE() __HAL_RCC_FMPI2C1_CLK_ENABLE() -#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() - -#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET() __HAL_RCC_FMPI2C1_FORCE_RESET() -#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET() __HAL_RCC_FMPI2C1_RELEASE_RESET() - -/* Definition for I2Cx Pins */ -#define DISCOVERY_AUDIO_I2Cx_SCL_PIN GPIO_PIN_6 -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT GPIOC -#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF GPIO_AF4_FMPI2C1 -#define DISCOVERY_AUDIO_I2Cx_SDA_PIN GPIO_PIN_7 - -/* I2C interrupt requests */ -#define DISCOVERY_AUDIO_I2Cx_EV_IRQn FMPI2C1_EV_IRQn -#define DISCOVERY_AUDIO_I2Cx_ER_IRQn FMPI2C1_ER_IRQn - -/* I2C clock speed configuration (in Hz) - WARNING: - Make sure that this define is not already declared in other files. - It can be used in parallel by other modules. */ -#ifndef DISCOVERY_I2C_SPEED - #define DISCOVERY_I2C_SPEED 100000 -#endif /* DISCOVERY_I2C_SPEED */ - -#ifndef DISCOVERY_I2Cx_TIMING -#define DISCOVERY_I2Cx_TIMING ((uint32_t)0x00901954) -#endif /* DISCOVERY_I2Cx_TIMING */ -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LOW_LEVEL_Exported_Functions STM32F413H DISCOVERY Low Level Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart); -void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.c deleted file mode 100644 index 1e90b234ae..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.c +++ /dev/null @@ -1,2073 +0,0 @@ -/** - ****************************************************************************** - * @file STM32f413h_discovery_audio.c - * @author MCD Application Team - * @brief This file provides the Audio driver for the STM32F413H-DISCOVERY board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/*============================================================================== - User NOTES - -How To use this driver: ------------------------ - + This driver supports STM32F4xx devices on STM32F413H-DISCOVERY boards. - + Call the function BSP_AUDIO_OUT_Init( - OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, - OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH) - Volume : Initial volume to be set (0 is min (mute), 100 is max (100%) - AudioFreq : Audio frequency in Hz (8000, 16000, 22500, 32000...) - this parameter is relative to the audio file/stream type. - ) - This function configures all the hardware required for the audio application (codec, I2C, I2S, - GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK. - If the returned value is different from AUDIO_OK or the function is stuck then the communication with - the codec has failed (try to un-plug the power or reset device in this case). - - OUTPUT_DEVICE_SPEAKER : only speaker will be set as output for the audio stream. - - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream. - - OUTPUT_DEVICE_BOTH : both Speaker and Headphone are used as outputs for the audio stream - at the same time. - + Call the function BSP_AUDIO_OUT_Play( - pBuffer: pointer to the audio data file address - Size : size of the buffer to be sent in Bytes - ) - to start playing (for the first time) from the audio file/stream. - + Call the function BSP_AUDIO_OUT_Pause() to pause playing - + Call the function BSP_AUDIO_OUT_Resume() to resume playing. - Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called - for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case). - Note. This function should be called only when the audio file is played or paused (not stopped). - + For each mode, you may need to implement the relative callback functions into your code. - The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in - the STM32F413H_discovery_audio.h file. (refer to the example for more details on the callbacks implementations) - + To Stop playing, to modify the volume level, the frequency, use the functions: BSP_AUDIO_OUT_SetVolume(), - AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetOutputMode(), BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop(). - + The driver API and the callback functions are at the end of the STM32F413H_discovery_audio.h file. - - -Driver architecture: --------------------- - + This driver provides the High Audio Layer: consists of the function API exported in the stm32f413h_discovery_audio.h file - (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...) - + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/ - providing the audio file/stream. These functions are also included as local functions into - the stm32f413h_discovery_audio_codec.c file (I2Sx_Out_Init(), I2Sx_Out_DeInit(), I2Sx_In_Init() and I2Sx_In_DeInit()) - -Known Limitations: ------------------- - 1- If the TDM Format used to play in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second - Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams. - 2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, - File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file. - 3- Supports only Stereo audio streaming. - 4- Supports only 16-bits audio data size. -==============================================================================*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery_audio.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO STM32F413H_DISCOVERY AUDIO - * @brief This file includes the low layer driver for wm8994 Audio Codec - * available on STM32F413H-DISCOVERY board(MB1209). - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Private_Macros STM32F413H DISCOVERY Audio Private macros - * @{ - */ - -#define DFSDM_OVER_SAMPLING(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 256 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 256 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 128 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 128 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 64 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 64 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 32 : 25 \ - -#define DFSDM_CLOCK_DIVIDER(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 24 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 48 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 32 : 72 \ - -#define DFSDM_FILTER_ORDER(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? DFSDM_FILTER_SINC3_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? DFSDM_FILTER_SINC4_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? DFSDM_FILTER_SINC4_ORDER \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? DFSDM_FILTER_SINC4_ORDER : DFSDM_FILTER_SINC4_ORDER \ - -#define DFSDM_MIC_BIT_SHIFT(__FREQUENCY__) \ - (__FREQUENCY__ == AUDIO_FREQUENCY_8K) ? 5 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_11K) ? 4 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_16K) ? 2 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_22K) ? 2 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_32K) ? 5 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_44K) ? 6 \ - : (__FREQUENCY__ == AUDIO_FREQUENCY_48K) ? 2 : 0 \ - -/* Saturate the record PCM sample */ -#define SaturaLH(N, L, H) (((N)<(L))?(L):(((N)>(H))?(H):(N))) -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Private_Variables STM32F413H DISCOVERY Audio Private Variables - * @{ - */ - -AUDIO_DrvTypeDef *audio_drv; -I2S_HandleTypeDef haudio_i2s; /* for Audio_OUT and Audio_IN_analog mic */ -I2S_HandleTypeDef haudio_in_i2sext; /* for Analog mic with full duplex mode */ -AUDIOIN_ContextTypeDef hAudioIn; - -DFSDM_Channel_HandleTypeDef hAudioInDfsdmChannel[DFSDM_MIC_NUMBER]; /* 5 DFSDM channel handle used for all microphones */ -DFSDM_Filter_HandleTypeDef hAudioInDfsdmFilter[DFSDM_MIC_NUMBER]; /* 5 DFSDM filter handle */ -DMA_HandleTypeDef hDmaDfsdm[DFSDM_MIC_NUMBER]; /* 5 DMA handle used for DFSDM regular conversions */ - -/* Buffers for right and left samples */ -int32_t *pScratchBuff[DEFAULT_AUDIO_IN_CHANNEL_NBR]; -int32_t ScratchSize; - -uint32_t DmaRecHalfBuffCplt[DFSDM_MIC_NUMBER] = {0}; -uint32_t DmaRecBuffCplt[DFSDM_MIC_NUMBER] = {0}; - -/* Application Buffer Trigger */ -__IO uint32_t AppBuffTrigger = 0; -__IO uint32_t AppBuffHalf = 0; -__IO uint32_t MicBuff[DFSDM_MIC_NUMBER] = {0}; -__IO uint16_t AudioInVolume = DEFAULT_AUDIO_IN_VOLUME; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Private_Function_Prototypes STM32F413H DISCOVERY Audio Private Prototypes - * @{ - */ -static void I2Sx_In_Init(uint32_t AudioFreq); -static void I2Sx_In_DeInit(void); -static void I2Sx_In_MspInit(void); -static void I2Sx_In_MspDeInit(void); - -static void I2Sx_Out_Init(uint32_t AudioFreq); -static void I2Sx_Out_DeInit(void); - -static uint8_t DFSDMx_DeInit(void); -static void DFSDMx_ChannelMspInit(void); -static void DFSDMx_ChannelMspDeInit(void); -static void DFSDMx_FilterMspInit(void); -static void DFSDMx_FilterMspDeInit(void); - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_out_Private_Functions STM32F413H DISCOVERY AUDIO OUT Private Functions - * @{ - */ - -/** - * @brief Configures the audio peripherals. - * @param OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE, - * or OUTPUT_DEVICE_BOTH. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note The I2S PLL input clock must be done in the user application. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) -{ - uint8_t ret = AUDIO_ERROR; - uint32_t deviceid = 0x00; - uint16_t buffer_fake[16] = {0x00}; - - I2Sx_Out_DeInit(); - AUDIO_IO_DeInit(); - - /* PLL clock is set depending on the AudioFreq (44.1 kHz vs 48kHz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* Configure the I2S peripheral */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET) - { - /* Initialize the I2S Msp: this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL); - } - I2Sx_Out_Init(AudioFreq); - - AUDIO_IO_Init(); - - /* wm8994 codec initialization */ - deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS); - - if(deviceid == WM8994_ID) - { - /* Reset the Codec Registers */ - wm8994_drv.Reset(AUDIO_I2C_ADDRESS); - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Send fake I2S data in order to generate MCLK needed by WM8994 to set its registers - * MCLK is generated only when a data stream is sent on I2S */ - HAL_I2S_Transmit_DMA(&haudio_i2s, buffer_fake, 16); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq); - /* Stop sending fake I2S data */ - HAL_I2S_DMAStop(&haudio_i2s); - } - - return ret; -} - -/** - * @brief Starts playing audio stream from a data buffer for a determined size. - * @param pBuffer: Pointer to the buffer - * @param Size: Number of audio data BYTES. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size) -{ - /* Call the audio Codec Play function */ - if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Update the Media layer and enable it for play */ - HAL_I2S_Transmit_DMA(&haudio_i2s, pBuffer, DMA_MAX(Size / AUDIODATA_SIZE)); - - return AUDIO_OK; - } -} - -/** - * @brief Sends n-Bytes on the I2S interface. - * @param pData: pointer on data address - * @param Size: number of data to be written - */ -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size) -{ - HAL_I2S_Transmit_DMA(&haudio_i2s, pData, Size); -} - -/** - * @brief This function Pauses the audio file stream. In case - * of using DMA, the DMA Pause feature is used. - * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Pause(void) -{ - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer pause function */ - HAL_I2S_DMAPause(&haudio_i2s); - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief This function Resumes the audio file stream. - * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only - * BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() - * function for resume could lead to unexpected behavior). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Resume(void) -{ - /* Call the Media layer pause/resume function */ - /* DMA stream resumed before accessing WM8994 register as WM8994 needs the MCLK to be generated to access its registers - * MCLK is generated only when a data stream is sent on I2S */ - HAL_I2S_DMAResume(&haudio_i2s); - - /* Call the Audio Codec Pause/Resume function */ - if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Stops audio playing and Power down the Audio Codec. - * @param Option: could be one of the following parameters - * - CODEC_PDWN_SW: for software power off (by writing registers). - * Then no need to reconfigure the Codec after power on. - * - CODEC_PDWN_HW: completely shut down the codec (physically). - * Then need to reconfigure the Codec after power on. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option) -{ - /* Call the Media layer stop function */ - HAL_I2S_DMAStop(&haudio_i2s); - - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0) - { - return AUDIO_ERROR; - } - else - { - if(Option == CODEC_PDWN_HW) - { - /* Wait at least 100us */ - HAL_Delay(1); - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Controls the current audio volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume) -{ - /* Call the codec volume control function with converted volume value */ - if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Enables or disables the MUTE mode by software - * @param Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to - * unmute the codec and restore previous volume level. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd) -{ - /* Call the Codec Mute function */ - if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Switch dynamically (while audio file is played) the output target - * (speaker or headphone). - * @param Output: The audio output target: OUTPUT_DEVICE_SPEAKER, - * OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output) -{ - /* Call the Codec output device function */ - if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0) - { - return AUDIO_ERROR; - } - else - { - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; - } -} - -/** - * @brief Updates the audio frequency. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @note This API should be called after the BSP_AUDIO_OUT_Init() to adjust the - * audio frequency. - * @retval None - */ -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq) -{ - /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_OUT_ClockConfig(&haudio_i2s, AudioFreq, NULL); - - /* Disable I2S peripheral to allow access to I2S internal registers */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* Update the I2S audio frequency configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - HAL_I2S_Init(&haudio_i2s); - - /* Enable I2S peripheral to generate MCLK */ - __HAL_I2S_ENABLE(&haudio_i2s); -} - -/** - * @brief Deinit the audio peripherals. - */ -void BSP_AUDIO_OUT_DeInit(void) -{ - I2Sx_Out_DeInit(); - /* DeInit the I2S MSP : this __weak function can be rewritten by the application */ - BSP_AUDIO_OUT_MspDeInit(&haudio_i2s, NULL); -} - -/** - * @brief Tx Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in STM32F413H_discovery_audio.h) */ - BSP_AUDIO_OUT_TransferComplete_CallBack(); -} - -/** - * @brief Tx Half Transfer completed callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in STM32F413H_discovery_audio.h) */ - BSP_AUDIO_OUT_HalfTransfer_CallBack(); -} - -/** - * @brief I2S error callbacks. - * @param hi2s: I2S handle - */ -void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) -{ - BSP_AUDIO_OUT_Error_CallBack(); -} - -/** - * @brief Manages the DMA full Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void) -{ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) -{ -} - -/** - * @brief Manages the DMA FIFO error event. - */ -__weak void BSP_AUDIO_OUT_Error_CallBack(void) -{ -} - -/** - * @brief Initializes BSP_AUDIO_OUT MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - static DMA_HandleTypeDef hdma_i2s_tx; - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Enable I2S clock */ - AUDIO_OUT_I2Sx_CLK_ENABLE(); - - /* Enable MCK, SCK, WS, SD and CODEC_INT GPIO clock */ - AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_SCK_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_SD_GPIO_CLK_ENABLE(); - AUDIO_OUT_I2Sx_WS_GPIO_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: MCK, SCK, WS and SD pins */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_MCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SCK_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_SCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_SCK_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_WS_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_WS_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_WS_GPIO_PORT, &gpio_init_structure); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SD_PIN; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_SD_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_OUT_I2Sx_DMAx_CLK_ENABLE(); - - if(hi2s->Instance == AUDIO_OUT_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_tx.Init.Channel = AUDIO_OUT_I2Sx_DMAx_CHANNEL; - hdma_i2s_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_i2s_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_tx.Init.PeriphDataAlignment = AUDIO_OUT_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_tx.Init.MemDataAlignment = AUDIO_OUT_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_tx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_tx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_tx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_tx.Instance = AUDIO_OUT_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hi2s, hdmatx, hdma_i2s_tx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_tx); - } - - /* Enable and set I2Sx Interrupt to a lower priority */ - HAL_NVIC_SetPriority(SPI3_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(SPI3_IRQn); - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_OUT_I2Sx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_OUT_I2Sx_DMAx_IRQ); -} - -/** - * @brief Deinitializes I2S MSP. - * @param hi2s: I2S handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_OUT_I2Sx_DMAx_IRQ); - - if(hi2s->Instance == AUDIO_OUT_I2Sx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(hi2s->hdmatx); - } - - /* Disable I2S peripheral */ - __HAL_I2S_DISABLE(hi2s); - - /* Deactives CODEC_I2S pins MCK, SCK, WS and SD by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_SCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_WS_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_WS_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_SD_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_OUT_I2Sx_CLK_DISABLE(); - - /* GPIO pins clock and DMA clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Clock Config. - * @param hi2s: might be required to set audio peripheral predivider if any. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - */ -__weak void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 271; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else if(AudioFreq == AUDIO_FREQUENCY_96K) /* AUDIO_FREQUENCY_96K */ - { - /* I2S clock config */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K */ - { - /* I2S clock config - PLLI2S_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SR = 344/7 = 49.142 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVR = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_PLLI2S; - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 7; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } -} - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_Out_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* I2S peripheral configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - haudio_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX; - haudio_i2s.Init.Standard = I2S_STANDARD_PHILIPS; - haudio_i2s.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE; - - /* Init the I2S */ - HAL_I2S_Init(&haudio_i2s); - - /* Enable I2S block */ - __HAL_I2S_ENABLE(&haudio_i2s); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_Out_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_OUT_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_i2s); -} - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_IN_Private_Functions STM32F413H DISCOVERY AUDIO IN Private functions - * @{ - */ - -/** - * @brief Initializes wave recording. - * @param AudioFreq: Audio frequency to be configured for the audio in peripheral. - * @param BitRes: Audio bit resolution. - * @param ChnlNbr: Audio channel number. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - return BSP_AUDIO_IN_InitEx(INPUT_DEVICE_DIGITAL_MIC, AudioFreq, BitRes, ChnlNbr); -} - -/** - * @brief Initializes wave recording. - * @param InputDevice: INPUT_DEVICE_DIGITAL_MICx or INPUT_DEVICE_ANALOG_MIC. - * @param AudioFreq: Audio frequency to be configured for the audio in peripheral. - * @param BitRes: Audio bit resolution. - * @param ChnlNbr: Audio channel number. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_InitEx(uint32_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) -{ - uint32_t ret = AUDIO_ERROR; - uint32_t deviceid =0; - uint32_t mic_enabled =0; - uint16_t buffer_fake[16] = {0x00}; - uint32_t i = 0; - - /* Store the audio record context */ - hAudioIn.Frequency = AudioFreq; - hAudioIn.BitResolution = BitRes; - hAudioIn.InputDevice = InputDevice; - hAudioIn.ChannelNbr = ChnlNbr; - - /* Store the total number of microphones enabled */ - for(i = 0; i < DFSDM_MIC_NUMBER; i ++) - { - if(((hAudioIn.InputDevice >> i) & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) - { - mic_enabled++; - } - } - - if (InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - InputDevice = INPUT_DEVICE_INPUT_LINE_1; - /* INPUT_DEVICE_ANALOG_MIC */ - /* Disable I2S */ - I2Sx_In_DeInit(); - - /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_IN_ClockConfig(AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT for analog mic */ - - /* I2S data transfer preparation: - Prepare the Media to be used for the audio transfer from I2S peripheral to memory */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - if(HAL_I2S_GetState(&haudio_i2s) == HAL_I2S_STATE_RESET) - { - BSP_AUDIO_OUT_MspInit(&haudio_i2s, NULL); /* Initialize GPIOs for SPI3 Master signals */ - /* Init the I2S MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_IN_MspInit(NULL); - } - - /* Configure I2S */ - I2Sx_In_Init(AudioFreq); - - AUDIO_IO_Init(); - - /* wm8994 codec initialization */ - deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS); - - if((deviceid) == WM8994_ID) - { - /* Reset the Codec Registers */ - wm8994_drv.Reset(AUDIO_I2C_ADDRESS); - /* Initialize the audio driver structure */ - audio_drv = &wm8994_drv; - ret = AUDIO_OK; - } - else - { - ret = AUDIO_ERROR; - } - - if(ret == AUDIO_OK) - { - /* Receive fake I2S data in order to generate MCLK needed by WM8994 to set its registers */ - HAL_I2S_Receive_DMA(&haudio_i2s, buffer_fake, 16); - /* Initialize the codec internal registers */ - audio_drv->Init(AUDIO_I2C_ADDRESS, (OUTPUT_DEVICE_HEADPHONE|InputDevice), 100, AudioFreq); - /* Stop receiving fake I2S data */ - HAL_I2S_DMAStop(&haudio_i2s); - } - } - else - { - if(hAudioIn.ChannelNbr != mic_enabled) - { - return AUDIO_ERROR; - } - else - { - /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */ - BSP_AUDIO_IN_ClockConfig(AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT for analog mic */ - - /* Init the DFSDM MSP: this __weak function can be redefined by the application*/ - BSP_AUDIO_IN_MspInit(NULL); - - /* Default configuration of DFSDM filters and channels */ - ret = BSP_AUDIO_IN_ConfigDigitalMic(hAudioIn.InputDevice, NULL); - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return ret; -} - -/** - * @brief DeInitializes the audio peripheral. - */ -void BSP_AUDIO_IN_DeInit(void) -{ - if(hAudioIn.InputDevice != INPUT_DEVICE_ANALOG_MIC) - { - /* MSP filters/channels initialization */ - BSP_AUDIO_IN_MspDeInit(NULL); - - DFSDMx_DeInit(); - } - else - { - I2Sx_In_DeInit(); - } -} - -/** - * @brief Initializes default configuration of the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @param InputDevice: The microphone to be configured. Can be INPUT_DEVICE_DIGITAL_MIC1..INPUT_DEVICE_DIGITAL_MIC5 - * @note Channel output Clock Divider and Filter Oversampling are calculated as follow: - * - Clock_Divider = CLK(input DFSDM)/CLK(micro) with - * 1MHZ < CLK(micro) < 3.2MHZ (TYP 2.4MHZ for MP34DT01TR) - * - Oversampling = CLK(input DFSDM)/(Clock_Divider * AudioFreq) - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_ConfigMicDefault(uint32_t InputDevice) -{ - uint32_t i = 0, mic_init[DFSDM_MIC_NUMBER] = {0}; - uint32_t filter_ch = 0, mic_num = 0; - - DFSDM_Filter_TypeDef* FilterInstnace[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_FILTER, AUDIO_DFSDMx_MIC2_FILTER, AUDIO_DFSDMx_MIC3_FILTER, AUDIO_DFSDMx_MIC4_FILTER, AUDIO_DFSDMx_MIC5_FILTER}; - DFSDM_Channel_TypeDef* ChannelInstnace[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_CHANNEL, AUDIO_DFSDMx_MIC2_CHANNEL, AUDIO_DFSDMx_MIC3_CHANNEL, AUDIO_DFSDMx_MIC4_CHANNEL, AUDIO_DFSDMx_MIC5_CHANNEL}; - uint32_t DigitalMicPins[DFSDM_MIC_NUMBER] = {DFSDM_CHANNEL_SAME_CHANNEL_PINS, DFSDM_CHANNEL_SAME_CHANNEL_PINS, DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS, DFSDM_CHANNEL_SAME_CHANNEL_PINS, DFSDM_CHANNEL_FOLLOWING_CHANNEL_PINS}; - uint32_t DigitalMicType[DFSDM_MIC_NUMBER] = {DFSDM_CHANNEL_SPI_RISING, DFSDM_CHANNEL_SPI_RISING, DFSDM_CHANNEL_SPI_FALLING, DFSDM_CHANNEL_SPI_RISING, DFSDM_CHANNEL_SPI_FALLING}; - uint32_t Channel4Filter[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_MIC1_CHANNEL_FOR_FILTER, AUDIO_DFSDMx_MIC2_CHANNEL_FOR_FILTER, AUDIO_DFSDMx_MIC3_CHANNEL_FOR_FILTER, AUDIO_DFSDMx_MIC4_CHANNEL_FOR_FILTER, AUDIO_DFSDMx_MIC5_CHANNEL_FOR_FILTER}; - - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC1); - } - else if(((InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC2); - } - else if(((InputDevice & INPUT_DEVICE_DIGITAL_MIC3) == INPUT_DEVICE_DIGITAL_MIC3) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC3); - } - else if(((InputDevice & INPUT_DEVICE_DIGITAL_MIC4) == INPUT_DEVICE_DIGITAL_MIC4) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC4); - } - else if(((InputDevice & INPUT_DEVICE_DIGITAL_MIC5) == INPUT_DEVICE_DIGITAL_MIC5) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC5); - } - - mic_init[mic_num] = 1; - - HAL_DFSDM_FilterDeInit(&hAudioInDfsdmFilter[mic_num]); - /* MIC filters initialization */ - __HAL_DFSDM_FILTER_RESET_HANDLE_STATE(&hAudioInDfsdmFilter[mic_num]); - hAudioInDfsdmFilter[mic_num].Instance = FilterInstnace[mic_num]; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.Trigger = DFSDM_FILTER_SW_TRIGGER; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.FastMode = ENABLE; - hAudioInDfsdmFilter[mic_num].Init.RegularParam.DmaMode = ENABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.Trigger = DFSDM_FILTER_SW_TRIGGER; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ScanMode = DISABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.DmaMode = DISABLE; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ExtTrigger = DFSDM_FILTER_EXT_TRIG_TIM8_TRGO; - hAudioInDfsdmFilter[mic_num].Init.InjectedParam.ExtTriggerEdge = DFSDM_FILTER_EXT_TRIG_BOTH_EDGES; - hAudioInDfsdmFilter[mic_num].Init.FilterParam.SincOrder = DFSDM_FILTER_ORDER(hAudioIn.Frequency); - hAudioInDfsdmFilter[mic_num].Init.FilterParam.Oversampling = DFSDM_OVER_SAMPLING(hAudioIn.Frequency); - hAudioInDfsdmFilter[mic_num].Init.FilterParam.IntOversampling = 1; - - if(HAL_OK != HAL_DFSDM_FilterInit(&hAudioInDfsdmFilter[mic_num])) - { - return AUDIO_ERROR; - } - - HAL_DFSDM_ChannelDeInit(&hAudioInDfsdmChannel[mic_num]); - /* MIC channels initialization */ - __HAL_DFSDM_CHANNEL_RESET_HANDLE_STATE(&hAudioInDfsdmChannel[mic_num]); - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Activation = ENABLE; - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Selection = DFSDM_CHANNEL_OUTPUT_CLOCK_AUDIO; - hAudioInDfsdmChannel[mic_num].Init.OutputClock.Divider = DFSDM_CLOCK_DIVIDER(hAudioIn.Frequency); - hAudioInDfsdmChannel[mic_num].Init.Input.Multiplexer = DFSDM_CHANNEL_EXTERNAL_INPUTS; - hAudioInDfsdmChannel[mic_num].Init.Input.DataPacking = DFSDM_CHANNEL_STANDARD_MODE; - hAudioInDfsdmChannel[mic_num].Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL; - hAudioInDfsdmChannel[mic_num].Init.Awd.FilterOrder = DFSDM_CHANNEL_SINC1_ORDER; - hAudioInDfsdmChannel[mic_num].Init.Awd.Oversampling = 10; - hAudioInDfsdmChannel[mic_num].Init.Offset = 0; - hAudioInDfsdmChannel[mic_num].Init.RightBitShift = DFSDM_MIC_BIT_SHIFT(hAudioIn.Frequency); - hAudioInDfsdmChannel[mic_num].Instance = ChannelInstnace[mic_num]; - hAudioInDfsdmChannel[mic_num].Init.Input.Pins = DigitalMicPins[mic_num]; - hAudioInDfsdmChannel[mic_num].Init.SerialInterface.Type = DigitalMicType[mic_num]; - - if(HAL_OK != HAL_DFSDM_ChannelInit(&hAudioInDfsdmChannel[mic_num])) - { - return AUDIO_ERROR; - } - - filter_ch = Channel4Filter[mic_num]; - /* Configure injected channel */ - if(HAL_OK != HAL_DFSDM_FilterConfigRegChannel(&hAudioInDfsdmFilter[mic_num], filter_ch, DFSDM_CONTINUOUS_CONV_ON)) - { - return AUDIO_ERROR; - } - } - return AUDIO_OK; -} - -/** - * @brief Initializes the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @param InputDevice: The microphone to be configured. Can be INPUT_DEVICE_DIGITAL_MIC1..INPUT_DEVICE_DIGITAL_MIC5 - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -__weak uint8_t BSP_AUDIO_IN_ConfigDigitalMic(uint32_t InputDevice, void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Default configuration of DFSDM filters and channels */ - return(BSP_AUDIO_IN_ConfigMicDefault(InputDevice)); - /* Note: This function can be called at application level and default configuration - can be overwritten to fit user's need */ -} - -/** - * @brief Allocate channel buffer scratch - * @param pScratch : pointer to scratch tables. - * @param size: size of scratch buffer - */ -uint8_t BSP_AUDIO_IN_AllocScratch (int32_t *pScratch, uint32_t size) -{ - uint32_t idx; - - ScratchSize = size / DEFAULT_AUDIO_IN_CHANNEL_NBR; - - /* copy scratch pointers */ - for (idx = 0; idx < DEFAULT_AUDIO_IN_CHANNEL_NBR ; idx++) - { - pScratchBuff[idx] = (int32_t *)(pScratch + idx * ScratchSize); - } - /* Return AUDIO_OK */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Record(uint16_t *pBuf, uint32_t size) -{ - hAudioIn.pRecBuf = pBuf; - hAudioIn.RecSize = size; - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - if (hAudioIn.InputDevice == INPUT_DEVICE_DIGITAL_MIC) - { - /* Call the Media layer start function for MIC1 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], ScratchSize)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer start function for MIC2 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], ScratchSize)) - { - return AUDIO_ERROR; - } - } - else - { - /* Start the process to receive the DMA */ - if (HAL_OK != HAL_I2SEx_TransmitReceive_DMA(&haudio_i2s, pBuf, pBuf, size)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Starts audio recording. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param size: Current size of the recorded buffer - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_RecordEx(uint32_t *pBuf, uint32_t size) -{ - uint8_t ret = AUDIO_ERROR; - hAudioIn.RecSize = size; - uint32_t i = 0; - uint32_t mic_init[DFSDM_MIC_NUMBER] = {0}; - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return ret; - } - else - { - hAudioIn.MultiBuffMode = 1; - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - /* Call the Media layer start function for MIC1 channel 1 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - /* Call the Media layer start function for MIC2 channel 1 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC3) == INPUT_DEVICE_DIGITAL_MIC3) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)] != 1)) - { - /* Call the Media layer start function for MIC3 channel 0 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC4) == INPUT_DEVICE_DIGITAL_MIC4) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)] != 1)) - { - /* Call the Media layer start function for MIC4 channel 7 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC5) == INPUT_DEVICE_DIGITAL_MIC5) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)] != 1)) - { - /* Call the Media layer start function for MIC5 channel 6 */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)], (int32_t*)pBuf[i], size)) - { - return AUDIO_ERROR; - } - MicBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)] = i; - mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)] = 1; - } - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Initializes the I2S MSP. - */ -static void I2Sx_In_MspInit(void) -{ - static DMA_HandleTypeDef hdma_i2s_rx; - GPIO_InitTypeDef gpio_init_structure; - - /* Enable I2S clock */ - AUDIO_IN_I2Sx_CLK_ENABLE(); - - /* Enable MCK GPIO clock, needed by the codec */ - AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE(); - - /* CODEC_I2S pins configuration: MCK pins */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Alternate = AUDIO_OUT_I2Sx_MCK_AF; - HAL_GPIO_Init(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, &gpio_init_structure); - - /* Enable SD GPIO clock */ - AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_ENABLE(); - /* CODEC_I2S pin configuration: SD pin */ - gpio_init_structure.Pin = AUDIO_IN_I2Sx_EXT_SD_PIN; - gpio_init_structure.Alternate = AUDIO_IN_I2Sx_EXT_SD_AF; - HAL_GPIO_Init(AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT, &gpio_init_structure); - - /* Enable the DMA clock */ - AUDIO_IN_I2Sx_DMAx_CLK_ENABLE(); - - if(haudio_i2s.Instance == AUDIO_IN_I2Sx) - { - /* Configure the hdma_i2s_rx handle parameters */ - hdma_i2s_rx.Init.Channel = AUDIO_IN_I2Sx_DMAx_CHANNEL; - hdma_i2s_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s_rx.Init.PeriphDataAlignment = AUDIO_IN_I2Sx_DMAx_PERIPH_DATA_SIZE; - hdma_i2s_rx.Init.MemDataAlignment = AUDIO_IN_I2Sx_DMAx_MEM_DATA_SIZE; - hdma_i2s_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s_rx.Init.Priority = DMA_PRIORITY_HIGH; - hdma_i2s_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hdma_i2s_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s_rx.Init.PeriphBurst = DMA_MBURST_SINGLE; - - hdma_i2s_rx.Instance = AUDIO_IN_I2Sx_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(&haudio_i2s, hdmarx, hdma_i2s_rx); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&hdma_i2s_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_i2s_rx); - } - - /* I2S DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_IN_I2Sx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_IN_I2Sx_DMAx_IRQ); -} - -/** - * @brief De-Initializes the I2S MSP. - */ -static void I2Sx_In_MspDeInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* I2S DMA IRQ Channel deactivation */ - HAL_NVIC_DisableIRQ(AUDIO_IN_I2Sx_DMAx_IRQ); - - if(haudio_i2s.Instance == AUDIO_IN_I2Sx) - { - /* Deinitialize the DMA stream */ - HAL_DMA_DeInit(haudio_i2s.hdmarx); - } - - /* Disable I2S peripheral */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* Deactives CODEC_I2S pins MCK by putting them in input mode */ - gpio_init_structure.Pin = AUDIO_OUT_I2Sx_MCK_PIN; - HAL_GPIO_DeInit(AUDIO_OUT_I2Sx_MCK_GPIO_PORT, gpio_init_structure.Pin); - - gpio_init_structure.Pin = AUDIO_IN_I2Sx_EXT_SD_PIN; - HAL_GPIO_DeInit(AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT, gpio_init_structure.Pin); - - /* Disable I2S clock */ - AUDIO_IN_I2Sx_CLK_DISABLE(); -} - -/** - * @brief Initializes BSP_AUDIO_IN MSP. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspInit(void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - if(hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - I2Sx_In_MspInit(); - } - else - { - /* MSP channels initialization */ - DFSDMx_ChannelMspInit(); - - /* MSP filters initialization */ - DFSDMx_FilterMspInit(); - } -} - -/** - * @brief De-Initializes BSP_AUDIO_IN MSP. - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_AUDIO_IN_MspDeInit(void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - if(hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - I2Sx_In_MspDeInit(); - } - else - { - /* MSP channels initialization */ - DFSDMx_ChannelMspDeInit(); - - /* MSP filters initialization */ - DFSDMx_FilterMspDeInit(); - } -} - -/** - * @brief Clock Config. - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Params : pointer on additional configuration parameters, can be NULL. - * @note This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency() - * Being __weak it can be overwritten by the application - * @retval AUDIO_OK if correct communication, else wrong communication - */ -__weak uint8_t BSP_AUDIO_IN_ClockConfig(uint32_t AudioFreq, void *Params) -{ - RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct); - - /* Set the PLL configuration according to the audio frequency */ - if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K)) - { - /* Configure PLLI2S prescalers */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM | RCC_PERIPHCLK_DFSDM2); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.Dfsdm1ClockSelection = RCC_DFSDM1CLKSOURCE_APB2; - rcc_ex_clk_init_struct.Dfsdm2ClockSelection = RCC_DFSDM2CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 271; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else if(AudioFreq == AUDIO_FREQUENCY_96K) - { - /* I2S clock config */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM | RCC_PERIPHCLK_DFSDM2); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.Dfsdm1ClockSelection = RCC_DFSDM1CLKSOURCE_APB2; - rcc_ex_clk_init_struct.Dfsdm2ClockSelection = RCC_DFSDM2CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 2; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_32K, AUDIO_FREQUENCY_48K */ - { - /* I2S clock config - PLLI2S_VCO: VCO_344M - I2S_CLK(first level) = PLLI2S_VCO/PLLI2SR = 344/7 = 49.142 Mhz - I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVR = 49.142/1 = 49.142 Mhz */ - rcc_ex_clk_init_struct.PeriphClockSelection = (RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_DFSDM | RCC_PERIPHCLK_DFSDM2); - rcc_ex_clk_init_struct.I2sApb1ClockSelection = RCC_I2SAPB1CLKSOURCE_PLLI2S; - rcc_ex_clk_init_struct.DfsdmClockSelection = RCC_DFSDM1CLKSOURCE_APB2|RCC_DFSDM2CLKSOURCE_APB2; - rcc_ex_clk_init_struct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SM = 8; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344; - rcc_ex_clk_init_struct.PLLI2S.PLLI2SR = 7; - - HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct); - } - - if(hAudioIn.InputDevice != INPUT_DEVICE_ANALOG_MIC) - { - /* I2S_APB1 selected as DFSDM audio clock source */ - __HAL_RCC_DFSDM1AUDIO_CONFIG(RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1); - /* I2S_APB1 selected as DFSDM audio clock source */ - __HAL_RCC_DFSDM2AUDIO_CONFIG(RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1); - } - - return AUDIO_OK; -} - -/** - * @brief Regular conversion complete callback. - * @note In interrupt mode, user has to read conversion value in this function - using HAL_DFSDM_FilterGetRegularValue. - * @param hdfsdm_filter : DFSDM filter handle. - */ -void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) -{ - uint32_t index, input_device = 0; - - if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC1_FILTER) - { - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC1; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC2_FILTER) - { - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC2; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC3_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC3; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC4_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC4; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC5_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC5; - } - - if(hAudioIn.MultiBuffMode == 1) - { - BSP_AUDIO_IN_TransferComplete_CallBackEx(input_device); - } - else - { - if((DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] == 1) && (DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] == 1)) - { - if(AppBuffTrigger >= hAudioIn.RecSize) - AppBuffTrigger = 0; - - for(index = (ScratchSize/2) ; index < ScratchSize; index++) - { - hAudioIn.pRecBuf[AppBuffTrigger] = (uint16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)][index] >> 8), -32760, 32760)); - hAudioIn.pRecBuf[AppBuffTrigger + 1] = (uint16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)][index] >> 8), -32760, 32760)); - AppBuffTrigger += 2; - } - DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = DmaRecBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 0; - } - - /* Update Trigger with Remaining Byte before callback if necessary */ - if(AppBuffTrigger >= hAudioIn.RecSize) - { - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); - } - else if((AppBuffTrigger >= hAudioIn.RecSize/2)) - { - if(AppBuffHalf == 0) - { - AppBuffHalf = 1; - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32l476g_eval_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); - } - } - } -} - -/** - * @brief Half regular conversion complete callback. - * @param hdfsdm_filter : DFSDM filter handle. - */ -void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) -{ - uint32_t index, input_device = 0; - - if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC1_FILTER) - { - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC1; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC2_FILTER) - { - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = 1; - input_device = INPUT_DEVICE_DIGITAL_MIC2; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC3_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC3; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC4_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC4; - } - else if(hdfsdm_filter->Instance == AUDIO_DFSDMx_MIC5_FILTER) - { - input_device = INPUT_DEVICE_DIGITAL_MIC5; - } - - if(hAudioIn.MultiBuffMode == 1) - { - BSP_AUDIO_IN_HalfTransfer_CallBackEx(input_device); - } - else - { - if((DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] == 1) && (DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] == 1)) - { - if(AppBuffTrigger >= hAudioIn.RecSize) - AppBuffTrigger = 0; - - for(index = 0; index < ScratchSize/2; index++) - { - hAudioIn.pRecBuf[AppBuffTrigger] = (int16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)][index] >> 8), -32760, 32760)); - hAudioIn.pRecBuf[AppBuffTrigger + 1] = (int16_t)(SaturaLH((pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)][index] >> 8), -32760, 32760)); - AppBuffTrigger += 2; - } - DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] = DmaRecHalfBuffCplt[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] = 0; - } - - - /* Update Trigger with Remaining Byte before callback if necessary */ - if(AppBuffTrigger >= hAudioIn.RecSize) - { - /* Reset Application Buffer Trigger */ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); - } - else if((AppBuffTrigger >= hAudioIn.RecSize/2)) - { - if(AppBuffHalf == 0) - { - AppBuffHalf = 1; - /* Manage the remaining file size and new address offset: This function - should be coded by user */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); - } - } - } -} - -/** - * @brief Half reception complete callback. - * @param hi2s : I2S handle. - */ -void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Manage the remaining file size and new address offset: This function - should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */ - BSP_AUDIO_IN_HalfTransfer_CallBack(); -} - -/** - * @brief Reception complete callback. - * @param hi2s : I2S handle. - */ -void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - /* Call the record update function to get the next buffer to fill and its size (size is ignored) */ - BSP_AUDIO_IN_TransferComplete_CallBack(); -} - -/** - * @brief Stops audio recording. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Stop(void) -{ - AppBuffTrigger = 0; - AppBuffHalf = 0; - - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_I2S_DMAStop(&haudio_i2s)) - { - return AUDIO_ERROR; - } - /* Call Audio Codec Stop function */ - if(audio_drv->Stop(AUDIO_I2C_ADDRESS, CODEC_PDWN_HW) != 0) - { - return AUDIO_ERROR; - } - /* Wait at least 100us */ - HAL_Delay(1); - } - else /* InputDevice = Digital Mic */ - { - /* Call the Media layer stop function for MIC1 channel */ - if(AUDIO_OK != BSP_AUDIO_IN_PauseEx(INPUT_DEVICE_DIGITAL_MIC1)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer stop function for MIC2 channel */ - if(AUDIO_OK != BSP_AUDIO_IN_PauseEx(INPUT_DEVICE_DIGITAL_MIC2)) - { - return AUDIO_ERROR; - } - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Stops audio recording. - * @param InputDevice: Microphone to be stopped. Can be INPUT_DEVICE_DIGITAL_MIC1 .. INPUT_DEVICE_DIGITAL_MIC5. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_StopEx(uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC5)) - { - return AUDIO_ERROR; - } - else - { - BSP_AUDIO_IN_PauseEx(InputDevice); - } - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Pauses the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Pause(void) -{ - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)])) - { - return AUDIO_ERROR; - } - - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)])) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Pauses the audio file stream. - * @param InputDevice: Microphone to be paused. Can be INPUT_DEVICE_DIGITAL_MIC1 .. INPUT_DEVICE_DIGITAL_MIC5. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_PauseEx(uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC5)) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStop_DMA(&hAudioInDfsdmFilter[POS_VAL(InputDevice)])) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_Resume(void) -{ - if (hAudioIn.InputDevice == INPUT_DEVICE_ANALOG_MIC) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer start function for MIC2 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)], ScratchSize)) - { - return AUDIO_ERROR; - } - - /* Call the Media layer start function for MIC1 channel */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], pScratchBuff[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)], ScratchSize)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Resumes the audio file stream. - * @param pBuf: Main buffer pointer for the recorded data storing - * @param InputDevice: Microphone to be paused. Can be INPUT_DEVICE_DIGITAL_MIC1 .. INPUT_DEVICE_DIGITAL_MIC5. - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_ResumeEx(uint32_t *pBuf, uint32_t InputDevice) -{ - if((InputDevice < INPUT_DEVICE_DIGITAL_MIC1) || (InputDevice > INPUT_DEVICE_DIGITAL_MIC5)) - { - return AUDIO_ERROR; - } - else - { - /* Call the Media layer stop function */ - if(HAL_OK != HAL_DFSDM_FilterRegularStart_DMA(&hAudioInDfsdmFilter[POS_VAL(InputDevice)], (int32_t*)pBuf[MicBuff[POS_VAL(InputDevice)]], hAudioIn.RecSize)) - { - return AUDIO_ERROR; - } - } - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief Controls the audio in volume level. - * @param Volume: Volume level to be set in percentage from 0% to 100% (0 for - * Mute and 100 for Max volume level). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume) -{ - /* Set the Global variable AudioInVolume */ - AudioInVolume = Volume; - - /* Return AUDIO_OK when all operations are correctly done */ - return AUDIO_OK; -} - -/** - * @brief User callback when record buffer is filled. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Manages the DMA Half Transfer complete event. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief User callback when record buffer is filled. - * @param InputDevice: INPUT_DEVICE_DIGITAL_MIC1 .. INPUT_DEVICE_DIGITAL_MIC5. - */ -__weak void BSP_AUDIO_IN_TransferComplete_CallBackEx(uint32_t InputDevice) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief User callback when record buffer is filled. - * @param InputDevice: INPUT_DEVICE_DIGITAL_MIC1 .. INPUT_DEVICE_DIGITAL_MIC5. - */ -__weak void BSP_AUDIO_IN_HalfTransfer_CallBackEx(uint32_t InputDevice) -{ - /* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled - to prepare the next buffer pointer and its size. */ -} - -/** - * @brief Audio IN Error callback function. - */ -__weak void BSP_AUDIO_IN_Error_Callback(void) -{ - /* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -} - -/** - * @} - */ - -/******************************************************************************* - Static Functions -*******************************************************************************/ - -/** - * @brief De-initializes the Digital Filter for Sigma-Delta Modulators interface (DFSDM). - * @retval AUDIO_OK if correct communication, else wrong communication - */ -static uint8_t DFSDMx_DeInit(void) -{ - for(uint32_t i = 0; i < DFSDM_MIC_NUMBER; i++) - { - if(hAudioInDfsdmFilter[i].Instance != NULL) - { - if(HAL_OK != HAL_DFSDM_FilterDeInit(&hAudioInDfsdmFilter[i])) - { - return AUDIO_ERROR; - } - hAudioInDfsdmFilter[i].Instance = NULL; - } - if(hAudioInDfsdmChannel[i].Instance != NULL) - { - if(HAL_OK != HAL_DFSDM_ChannelDeInit(&hAudioInDfsdmChannel[i])) - { - return AUDIO_ERROR; - } - hAudioInDfsdmChannel[i].Instance = NULL; - } - } - return AUDIO_OK; -} - -/** - * @brief Initializes the DFSDM channel MSP. - */ -static void DFSDMx_ChannelMspInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; - - if((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) - { - /* Enable DFSDM clock */ - AUDIO_DFSDMx_MIC1_CLK_ENABLE(); - /* Enable GPIO clock */ - AUDIO_DFSDMx_MIC1_CKOUT_DMIC_GPIO_CLK_ENABLE(); - - /* DFSDM MIC1 pins configuration: DFSDM_CKOUT, DMIC_DATIN pins -------------*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC1_CKOUT_PIN; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_MIC1_CKOUT_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_MIC1_CKOUT_DMIC_GPIO_PORT, &GPIO_InitStruct); - - AUDIO_DFSDMx_MIC1_DMIC_GPIO_CLK_ENABLE(); - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC1_DMIC_PIN; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_MIC1_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_MIC1_DMIC_GPIO_PORT, &GPIO_InitStruct); - } - - if(hAudioIn.InputDevice > INPUT_DEVICE_DIGITAL_MIC1) - { - /* Enable DFSDM clock */ - AUDIO_DFSDMx_MIC2_5_CLK_ENABLE(); - /* Enable GPIO clock */ - AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_GPIO_CLK_ENABLE(); - - /* DFSDM MIC2 pins configuration: DFSDM_CKOUT, DMIC_DATIN pins -------------*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC2_5_CKOUT_PIN; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_GPIO_PORT, &GPIO_InitStruct); - - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) ||\ - ((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC3) == INPUT_DEVICE_DIGITAL_MIC3)) - { - AUDIO_DFSDMx_MIC23_DMIC_GPIO_CLK_ENABLE(); - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC23_DMIC_PIN; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_MIC23_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_MIC23_DMIC_GPIO_PORT, &GPIO_InitStruct); - } - - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC4) == INPUT_DEVICE_DIGITAL_MIC4) ||\ - ((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC5) == INPUT_DEVICE_DIGITAL_MIC5)) - { - - AUDIO_DFSDMx_MIC45_DMIC_GPIO_CLK_ENABLE(); - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC45_DMIC_PIN; - GPIO_InitStruct.Alternate = AUDIO_DFSDMx_MIC45_DMIC_AF; - HAL_GPIO_Init(AUDIO_DFSDMx_MIC45_DMIC_GPIO_PORT, &GPIO_InitStruct); - } - } -} - -/** - * @brief DeInitializes the DFSDM channel MSP. - */ -static void DFSDMx_ChannelMspDeInit(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - if((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) - { - /* DFSDM MIC1 pins configuration: DFSDM_CKOUT, DMIC_DATIN pins -------------*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC1_CKOUT_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_MIC1_CKOUT_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC1_DMIC_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_MIC1_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - } - - if(hAudioIn.InputDevice > INPUT_DEVICE_DIGITAL_MIC1) - { - /* DFSDM MIC2, MIC3, MIC4 and MIC5 pins configuration: DFSDM_CKOUT pin -----*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC2_5_CKOUT_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) ||\ - ((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC3) == INPUT_DEVICE_DIGITAL_MIC3)) - { - /* DFSDM MIC2, MIC3 pins configuration: DMIC_DATIN pin -----*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC23_DMIC_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_MIC23_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - } - - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC4) == INPUT_DEVICE_DIGITAL_MIC4) ||\ - ((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC5) == INPUT_DEVICE_DIGITAL_MIC5)) - { - /* DFSDM MIC4, MIC5 pins configuration: DMIC_DATIN pin -----*/ - GPIO_InitStruct.Pin = AUDIO_DFSDMx_MIC45_DMIC_PIN; - HAL_GPIO_DeInit(AUDIO_DFSDMx_MIC45_DMIC_GPIO_PORT, GPIO_InitStruct.Pin); - } - } -} - -/** - * @brief Initializes the DFSDM filter MSP. - */ -static void DFSDMx_FilterMspInit(void) -{ - uint32_t i = 0, mic_num = 0, mic_init[DFSDM_MIC_NUMBER] = {0}; - IRQn_Type AUDIO_DFSDM_DMAx_MIC_IRQHandler[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_IRQ, AUDIO_DFSDMx_DMAx_MIC2_IRQ, AUDIO_DFSDMx_DMAx_MIC3_IRQ, AUDIO_DFSDMx_DMAx_MIC4_IRQ, AUDIO_DFSDMx_DMAx_MIC5_IRQ}; - DMA_Stream_TypeDef* AUDIO_DFSDMx_DMAx_MIC_STREAM[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_STREAM, AUDIO_DFSDMx_DMAx_MIC2_STREAM, AUDIO_DFSDMx_DMAx_MIC3_STREAM, AUDIO_DFSDMx_DMAx_MIC4_STREAM, AUDIO_DFSDMx_DMAx_MIC5_STREAM}; - uint32_t AUDIO_DFSDMx_DMAx_MIC_CHANNEL[DFSDM_MIC_NUMBER] = {AUDIO_DFSDMx_DMAx_MIC1_CHANNEL, AUDIO_DFSDMx_DMAx_MIC2_CHANNEL, AUDIO_DFSDMx_DMAx_MIC3_CHANNEL, AUDIO_DFSDMx_DMAx_MIC4_CHANNEL, AUDIO_DFSDMx_DMAx_MIC5_CHANNEL}; - - /* Enable the DMA clock */ - AUDIO_DFSDMx_DMAx_CLK_ENABLE(); - - for(i = 0; i < hAudioIn.ChannelNbr; i++) - { - if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC1) == INPUT_DEVICE_DIGITAL_MIC1) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC1)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC1); - mic_init[mic_num] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC2) == INPUT_DEVICE_DIGITAL_MIC2) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC2)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC2); - mic_init[mic_num] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC3) == INPUT_DEVICE_DIGITAL_MIC3) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC3)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC3); - mic_init[mic_num] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC4) == INPUT_DEVICE_DIGITAL_MIC4) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC4)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC4); - mic_init[mic_num] = 1; - } - else if(((hAudioIn.InputDevice & INPUT_DEVICE_DIGITAL_MIC5) == INPUT_DEVICE_DIGITAL_MIC5) && (mic_init[POS_VAL(INPUT_DEVICE_DIGITAL_MIC5)] != 1)) - { - mic_num = POS_VAL(INPUT_DEVICE_DIGITAL_MIC5); - mic_init[mic_num] = 1; - } - - /* Configure the hDmaDfsdm[i] handle parameters */ - hDmaDfsdm[mic_num].Init.Channel = AUDIO_DFSDMx_DMAx_MIC_CHANNEL[mic_num]; - hDmaDfsdm[mic_num].Instance = AUDIO_DFSDMx_DMAx_MIC_STREAM[mic_num]; - hDmaDfsdm[mic_num].Init.Direction = DMA_PERIPH_TO_MEMORY; - hDmaDfsdm[mic_num].Init.PeriphInc = DMA_PINC_DISABLE; - hDmaDfsdm[mic_num].Init.MemInc = DMA_MINC_ENABLE; - hDmaDfsdm[mic_num].Init.PeriphDataAlignment = AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE; - hDmaDfsdm[mic_num].Init.MemDataAlignment = AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE; - hDmaDfsdm[mic_num].Init.Mode = DMA_CIRCULAR; - hDmaDfsdm[mic_num].Init.Priority = DMA_PRIORITY_HIGH; - hDmaDfsdm[mic_num].Init.FIFOMode = DMA_FIFOMODE_DISABLE; - hDmaDfsdm[mic_num].Init.MemBurst = DMA_MBURST_SINGLE; - hDmaDfsdm[mic_num].Init.PeriphBurst = DMA_PBURST_SINGLE; - hDmaDfsdm[mic_num].State = HAL_DMA_STATE_RESET; - - /* Associate the DMA handle */ - __HAL_LINKDMA(&hAudioInDfsdmFilter[mic_num], hdmaReg, hDmaDfsdm[mic_num]); - - /* Reset DMA handle state */ - __HAL_DMA_RESET_HANDLE_STATE(&hDmaDfsdm[mic_num]); - - /* Configure the DMA Channel */ - HAL_DMA_Init(&hDmaDfsdm[mic_num]); - - /* DMA IRQ Channel configuration */ - HAL_NVIC_SetPriority(AUDIO_DFSDM_DMAx_MIC_IRQHandler[mic_num], AUDIO_IN_IRQ_PREPRIO, 0); - HAL_NVIC_EnableIRQ(AUDIO_DFSDM_DMAx_MIC_IRQHandler[mic_num]); - } -} - -/** - * @brief DeInitializes the DFSDM filter MSP. - */ -static void DFSDMx_FilterMspDeInit(void) -{ - /* Configure the DMA Channel */ - for(uint32_t i = 0; i < DFSDM_MIC_NUMBER; i++) - { - if(hDmaDfsdm[i].Instance != NULL) - { - HAL_DMA_DeInit(&hDmaDfsdm[i]); - } - } -} - -/** - * @brief Initializes the Audio Codec audio interface (I2S) - * @note This function assumes that the I2S input clock - * is already configured and ready to be used. - * @param AudioFreq: Audio frequency to be configured for the I2S peripheral. - */ -static void I2Sx_In_Init(uint32_t AudioFreq) -{ - /* Initialize the hAudioInI2s and haudio_in_i2sext Instance parameters */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - haudio_in_i2sext.Instance = I2S3ext; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - __HAL_I2S_DISABLE(&haudio_in_i2sext); - - /* I2S peripheral configuration */ - haudio_i2s.Init.AudioFreq = AudioFreq; - haudio_i2s.Init.ClockSource = I2S_CLOCK_PLL; - haudio_i2s.Init.CPOL = I2S_CPOL_LOW; - haudio_i2s.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_i2s.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_i2s.Init.Mode = I2S_MODE_MASTER_TX; - haudio_i2s.Init.Standard = I2S_STANDARD_PHILIPS; - haudio_i2s.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; - /* Init the I2S */ - HAL_I2S_Init(&haudio_i2s); - - /* I2Sext peripheral configuration */ - haudio_in_i2sext.Init.AudioFreq = AudioFreq; - haudio_in_i2sext.Init.ClockSource = I2S_CLOCK_PLL; - haudio_in_i2sext.Init.CPOL = I2S_CPOL_HIGH; - haudio_in_i2sext.Init.DataFormat = I2S_DATAFORMAT_16B; - haudio_in_i2sext.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE; - haudio_in_i2sext.Init.Mode = I2S_MODE_SLAVE_RX; - haudio_in_i2sext.Init.Standard = I2S_STANDARD_PHILIPS; - - /* Init the I2Sext */ - HAL_I2S_Init(&haudio_in_i2sext); - - /* Enable I2S block */ - __HAL_I2S_ENABLE(&haudio_i2s); - __HAL_I2S_ENABLE(&haudio_in_i2sext); -} - -/** - * @brief Deinitializes the Audio Codec audio interface (I2S). - */ -static void I2Sx_In_DeInit(void) -{ - /* Initialize the hAudioInI2s Instance parameter */ - haudio_i2s.Instance = AUDIO_IN_I2Sx; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_i2s); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_i2s); - - /* Initialize the hAudioInI2s Instance parameter */ - haudio_in_i2sext.Instance = I2S3ext; - - /* Disable I2S block */ - __HAL_I2S_DISABLE(&haudio_in_i2sext); - - /* DeInit the I2S */ - HAL_I2S_DeInit(&haudio_in_i2sext); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.h deleted file mode 100644 index 8911b80ad7..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_audio.h +++ /dev/null @@ -1,391 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_audio.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32f413h_discovery_audio.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_AUDIO_H -#define __STM32F413H_DISCOVERY_AUDIO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -/* Include audio component Driver */ -#include "../Components/wm8994/wm8994.h" -#include "stm32f413h_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_AUDIO - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Exported_Types STM32F413H DISCOVERY Audio Exported Types - * @{ - */ - -typedef struct -{ - uint32_t Frequency; /* Record Frequency */ - uint32_t BitResolution; /* Record bit resolution */ - uint32_t ChannelNbr; /* Record Channel Number */ - uint16_t *pRecBuf; /* Pointer to record user buffer */ - uint32_t RecSize; /* Size to record in mono, double size to record in stereo */ - uint32_t InputDevice; /* Audio Input Device */ - uint32_t MultiBuffMode; /* Multi buffer mode selection */ -}AUDIOIN_ContextTypeDef; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Exported_Constants STM32F413H DISCOVERY Audio Exported Constants - * @{ - */ - -/*------------------------------------------------------------------------------ - AUDIO OUT CONFIGURATION -------------------------------------------------------------------------------*/ -/* SPI Configuration defines */ -#define AUDIO_OUT_I2Sx SPI2 -#define AUDIO_OUT_I2Sx_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() - -#define AUDIO_OUT_I2Sx_MCK_PIN GPIO_PIN_3 -#define AUDIO_OUT_I2Sx_MCK_GPIO_PORT GPIOA -#define AUDIO_OUT_I2Sx_MCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_MCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_MCK_AF GPIO_AF5_SPI2 - -#define AUDIO_OUT_I2Sx_SCK_PIN GPIO_PIN_3 -#define AUDIO_OUT_I2Sx_SCK_GPIO_PORT GPIOD -#define AUDIO_OUT_I2Sx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_SCK_AF GPIO_AF5_SPI2 - -#define AUDIO_OUT_I2Sx_WS_PIN GPIO_PIN_9 -#define AUDIO_OUT_I2Sx_WS_GPIO_PORT GPIOB -#define AUDIO_OUT_I2Sx_WS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_WS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_WS_AF GPIO_AF5_SPI2 - -#define AUDIO_OUT_I2Sx_SD_PIN GPIO_PIN_3 -#define AUDIO_OUT_I2Sx_SD_GPIO_PORT GPIOC -#define AUDIO_OUT_I2Sx_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_SD_AF GPIO_AF5_SPI2 - -/* I2S DMA Stream Tx definitions */ -#define AUDIO_OUT_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_OUT_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_OUT_I2Sx_DMAx_STREAM DMA1_Stream4 -#define AUDIO_OUT_I2Sx_DMAx_CHANNEL DMA_CHANNEL_0 -#define AUDIO_OUT_I2Sx_DMAx_IRQ DMA1_Stream4_IRQn -#define AUDIO_OUT_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_OUT_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD -#define DMA_MAX_SIZE 0xFFFF - -#define AUDIO_OUT_I2Sx_DMAx_IRQHandler DMA1_Stream4_IRQHandler - - /* Select the interrupt preemption priority for the DMA interrupt */ -#define AUDIO_OUT_IRQ_PREPRIO ((uint32_t)0x0E) /* Select the preemption priority level(0 is the highest) */ - - -/*------------------------------------------------------------------------------ - AUDIO IN CONFIGURATION -------------------------------------------------------------------------------*/ -/* DFSDM Configuration defines */ -#define AUDIO_DFSDMx_MIC1_CHANNEL DFSDM1_Channel1 /* MP34DT01TR U1 microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC2_CHANNEL DFSDM2_Channel1 /* MP34DT01TR U2 microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC3_CHANNEL DFSDM2_Channel0 /* MP34DT01TR U3 microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC4_CHANNEL DFSDM2_Channel7 /* MP34DT01TR U4 microphone on PCB top side */ -#define AUDIO_DFSDMx_MIC5_CHANNEL DFSDM2_Channel6 /* MP34DT01TR U5 microphone on PCB top side */ - -#define AUDIO_DFSDMx_MIC1_CHANNEL_FOR_FILTER DFSDM_CHANNEL_1 -#define AUDIO_DFSDMx_MIC2_CHANNEL_FOR_FILTER DFSDM_CHANNEL_1 -#define AUDIO_DFSDMx_MIC3_CHANNEL_FOR_FILTER DFSDM_CHANNEL_0 -#define AUDIO_DFSDMx_MIC4_CHANNEL_FOR_FILTER DFSDM_CHANNEL_7 -#define AUDIO_DFSDMx_MIC5_CHANNEL_FOR_FILTER DFSDM_CHANNEL_6 - -#define AUDIO_DFSDMx_MIC1_FILTER DFSDM1_Filter0 /* Common MIC1 filter for MP34DT01TR (U1) microphone input */ -#define AUDIO_DFSDMx_MIC2_FILTER DFSDM2_Filter0 /* Common MIC2 filter for MP34DT01TR(U2) microphone input */ -#define AUDIO_DFSDMx_MIC3_FILTER DFSDM2_Filter1 /* Common MIC2 filter for MP34DT01TR(U3) microphone input */ -#define AUDIO_DFSDMx_MIC4_FILTER DFSDM2_Filter2 /* Common MIC2 filter for MP34DT01TR(U4) microphone input */ -#define AUDIO_DFSDMx_MIC5_FILTER DFSDM2_Filter3 /* Common MIC2 filter for MP34DT01TR(U5) microphone input */ - -#define AUDIO_DFSDMx_MIC2_5_CLK_ENABLE() __HAL_RCC_DFSDM2_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC1_CLK_ENABLE() __HAL_RCC_DFSDM1_CLK_ENABLE() - -#define AUDIO_DFSDMx_MIC1_CKOUT_PIN GPIO_PIN_8 -#define AUDIO_DFSDMx_MIC1_CKOUT_DMIC_GPIO_PORT GPIOA -#define AUDIO_DFSDMx_MIC1_CKOUT_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC1_CKOUT_DMIC_AF GPIO_AF6_DFSDM1 - -#define AUDIO_DFSDMx_MIC1_DMIC_PIN GPIO_PIN_6 -#define AUDIO_DFSDMx_MIC1_DMIC_GPIO_PORT GPIOD -#define AUDIO_DFSDMx_MIC1_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC1_DMIC_AF GPIO_AF6_DFSDM1 - -#define AUDIO_DFSDMx_MIC2_5_CKOUT_PIN GPIO_PIN_2 -#define AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_GPIO_PORT GPIOD -#define AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC2_5_CKOUT_DMIC_AF GPIO_AF3_DFSDM2 - -#define AUDIO_DFSDMx_MIC23_DMIC_PIN GPIO_PIN_7 -#define AUDIO_DFSDMx_MIC23_DMIC_GPIO_PORT GPIOA -#define AUDIO_DFSDMx_MIC23_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC23_DMIC_AF GPIO_AF7_DFSDM2 - -#define AUDIO_DFSDMx_MIC45_DMIC_PIN GPIO_PIN_7 -#define AUDIO_DFSDMx_MIC45_DMIC_GPIO_PORT GPIOB -#define AUDIO_DFSDMx_MIC45_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_DFSDMx_MIC45_DMIC_AF GPIO_AF6_DFSDM2 - -/* DFSDM DMA Right and Left channels definitions */ -#define AUDIO_DFSDMx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE() -#define AUDIO_DFSDMx_DMAx_MIC1_STREAM DMA2_Stream6 -#define AUDIO_DFSDMx_DMAx_MIC1_CHANNEL DMA_CHANNEL_3 -#define AUDIO_DFSDMx_DMAx_MIC2_STREAM DMA2_Stream0 -#define AUDIO_DFSDMx_DMAx_MIC2_CHANNEL DMA_CHANNEL_8 -#define AUDIO_DFSDMx_DMAx_MIC3_STREAM DMA2_Stream1 -#define AUDIO_DFSDMx_DMAx_MIC3_CHANNEL DMA_CHANNEL_8 -#define AUDIO_DFSDMx_DMAx_MIC4_STREAM DMA2_Stream2 -#define AUDIO_DFSDMx_DMAx_MIC4_CHANNEL DMA_CHANNEL_8 -#define AUDIO_DFSDMx_DMAx_MIC5_STREAM DMA2_Stream7 -#define AUDIO_DFSDMx_DMAx_MIC5_CHANNEL DMA_CHANNEL_8 -#define AUDIO_DFSDMx_DMAx_MIC1_IRQ DMA2_Stream6_IRQn -#define AUDIO_DFSDMx_DMAx_MIC2_IRQ DMA2_Stream0_IRQn -#define AUDIO_DFSDMx_DMAx_MIC3_IRQ DMA2_Stream1_IRQn -#define AUDIO_DFSDMx_DMAx_MIC4_IRQ DMA2_Stream2_IRQn -#define AUDIO_DFSDMx_DMAx_MIC5_IRQ DMA2_Stream7_IRQn - -#define AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_WORD -#define AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_WORD - -#define AUDIO_DFSDM_DMAx_MIC1_IRQHandler DMA2_Stream6_IRQHandler -#define AUDIO_DFSDM_DMAx_MIC2_IRQHandler DMA2_Stream0_IRQHandler -#define AUDIO_DFSDM_DMAx_MIC3_IRQHandler DMA2_Stream1_IRQHandler -#define AUDIO_DFSDM_DMAx_MIC4_IRQHandler DMA2_Stream2_IRQHandler -#define AUDIO_DFSDM_DMAx_MIC5_IRQHandler DMA2_Stream7_IRQHandler - - -/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ -#define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ - -/* HW defines for Analog mic configuration */ -#define AUDIO_IN_I2Sx SPI3 -#define AUDIO_IN_I2Sx_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() -#define AUDIO_IN_I2Sx_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() - -#define AUDIO_IN_I2Sx_EXT_SD_PIN GPIO_PIN_4 -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_PORT GPIOB -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define AUDIO_IN_I2Sx_EXT_SD_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define AUDIO_IN_I2Sx_EXT_SD_AF GPIO_AF7_SPI3 - -#define AUDIO_IN_CODEC_INT_PIN GPIO_PIN_2 -#define AUDIO_IN_CODEC_INT_GPIO_PORT GPIOG -#define AUDIO_IN_CODEC_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define AUDIO_IN_CODEC_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define AUDIO_IN_CODEC_INT_IRQ EXTI2_IRQn - -/* I2S DMA Stream Rx definitions */ -#define AUDIO_IN_I2Sx_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() -#define AUDIO_IN_I2Sx_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() -#define AUDIO_IN_I2Sx_DMAx_STREAM DMA1_Stream0 -#define AUDIO_IN_I2Sx_DMAx_CHANNEL DMA_CHANNEL_3 -#define AUDIO_IN_I2Sx_DMAx_IRQ DMA1_Stream0_IRQn -#define AUDIO_IN_I2Sx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD -#define AUDIO_IN_I2Sx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD - -#define AUDIO_IN_I2Sx_DMAx_IRQHandler DMA1_Stream0_IRQHandler -#define AUDIO_IN_I2Sx_DMAx_IRQ DMA1_Stream0_IRQn - -/*------------------------------------------------------------------------------ - CONFIGURATION: Audio Driver Configuration parameters -------------------------------------------------------------------------------*/ - -#define AUDIODATA_SIZE 2 /* 16-bits audio data size */ - -/* Audio status definition */ -#define AUDIO_OK ((uint8_t)0) -#define AUDIO_ERROR ((uint8_t)1) -#define AUDIO_TIMEOUT ((uint8_t)2) - -/* Audio out parameters */ -#define DEFAULT_AUDIO_OUT_FREQ I2S_AUDIOFREQ_48K -#define DEFAULT_AUDIO_OUT_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_OUT_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_OUT_VOLUME ((uint16_t)64) - -/* Audio in parameters */ -#define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K -#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16) -#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */ -#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64) - -/*------------------------------------------------------------------------------ - OUTPUT DEVICES definition -------------------------------------------------------------------------------*/ - -/* Alias on existing output devices to adapt for 2 headphones output */ -#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE -#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 */ - -/*------------------------------------------------------------------------------ - INPUT DEVICES definition -------------------------------------------------------------------------------*/ -/* Analog microphone input from 3.5 audio jack connector */ -#define INPUT_DEVICE_ANALOG_MIC ((uint32_t)0x00000001) -/* MP34DT01TR digital microphone on PCB top side */ -#define INPUT_DEVICE_DIGITAL_MIC1 ((uint32_t)0x00000010) -#define INPUT_DEVICE_DIGITAL_MIC2 ((uint32_t)0x00000020) -#define INPUT_DEVICE_DIGITAL_MIC3 ((uint32_t)0x00000040) -#define INPUT_DEVICE_DIGITAL_MIC4 ((uint32_t)0x00000080) -#define INPUT_DEVICE_DIGITAL_MIC5 ((uint32_t)0x00000100) -#define INPUT_DEVICE_DIGITAL_MIC ((uint32_t)(INPUT_DEVICE_DIGITAL_MIC1 | INPUT_DEVICE_DIGITAL_MIC2)) -#define INPUT_DEVICE_DIGITAL_MIC_ALL ((uint32_t)(INPUT_DEVICE_DIGITAL_MIC1 | INPUT_DEVICE_DIGITAL_MIC2 |\ - INPUT_DEVICE_DIGITAL_MIC3 | INPUT_DEVICE_DIGITAL_MIC4 |\ - INPUT_DEVICE_DIGITAL_MIC5)) - -#define DFSDM_MIC_NUMBER (5) - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Exported_Variables STM32F413H DISCOVERY Audio Exported Variables - * @{ - */ -extern __IO uint16_t AudioInVolume; - /** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_Exported_Macros STM32F413H DISCOVERY Audio Exported Macros - * @{ - */ -#define DMA_MAX(x) (((x) <= DMA_MAX_SIZE)? (x):DMA_MAX_SIZE) -#define POS_VAL(VAL) (POSITION_VAL(VAL) - 4) -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_OUT_Exported_Functions STM32F413H DISCOVERY Audio OUT Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); -void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); -uint8_t BSP_AUDIO_OUT_Pause(void); -uint8_t BSP_AUDIO_OUT_Resume(void); -uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); -uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); -void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); -uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); -void BSP_AUDIO_OUT_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function is called when the requested data has been completely transferred.*/ -void BSP_AUDIO_OUT_TransferComplete_CallBack(void); - -/* This function is called when half of the requested buffer has been transferred. */ -void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_OUT_Error_CallBack(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); -void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); -void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_AUDIO_IN_Exported_Functions STM32F413H DISCOVERY AudioIN Exported Functions - * @{ - */ -uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_InitEx(uint32_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); -uint8_t BSP_AUDIO_IN_ConfigMicDefault(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_ConfigDigitalMic(uint32_t InputDevice, void *Params); -uint8_t BSP_AUDIO_IN_AllocScratch (int32_t *pScratch, uint32_t size); -uint8_t BSP_AUDIO_IN_Record(uint16_t *pBuf, uint32_t Size); -uint8_t BSP_AUDIO_IN_RecordEx(uint32_t *pBuf, uint32_t Size); -uint8_t BSP_AUDIO_IN_SetFrequency(uint32_t AudioFreq); -uint8_t BSP_AUDIO_IN_Stop(void); -uint8_t BSP_AUDIO_IN_StopEx(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_Pause(void); -uint8_t BSP_AUDIO_IN_PauseEx(uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_Resume(void); -uint8_t BSP_AUDIO_IN_ResumeEx(uint32_t *pBuf, uint32_t InputDevice); -uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); -void BSP_AUDIO_IN_DeInit(void); - -/* User Callbacks: user has to implement these functions in his code if they are needed. */ -/* This function should be implemented by the user application. - It is called into this driver when the current buffer is filled to prepare the next - buffer pointer and its size. */ -void BSP_AUDIO_IN_TransferComplete_CallBack(void); -void BSP_AUDIO_IN_HalfTransfer_CallBack(void); -void BSP_AUDIO_IN_TransferComplete_CallBackEx(uint32_t InputDevice); -void BSP_AUDIO_IN_HalfTransfer_CallBackEx(uint32_t InputDevice); - -/* This function is called when an Interrupt due to transfer error on or peripheral - error occurs. */ -void BSP_AUDIO_IN_Error_Callback(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -uint8_t BSP_AUDIO_IN_ClockConfig(uint32_t AudioFreq, void *Params); -void BSP_AUDIO_IN_MspInit(void *Params); -void BSP_AUDIO_IN_MspDeInit(void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_AUDIO_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.c deleted file mode 100644 index 19369fbc3c..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.c +++ /dev/null @@ -1,1108 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_lcd.c - * @author MCD Application Team - * @brief This file includes the driver for Liquid Crystal Display (LCD) module - * mounted on STM32F413H-DISCOVERY board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive indirectly an LCD TFT. - - This driver supports the LS016B8UY LCD. - - The LS016B8UY component driver MUST be included with this driver. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the LCD using the BSP_LCD_Init() function. - - + Display on LCD - o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string - line using the BSP_LCD_ClearStringLine() function. - o Display a character on the specified line and column using the BSP_LCD_DisplayChar() - function or a complete string line using the BSP_LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using the BSP_LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions. - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD STM32F413H_DISCOVERY LCD - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Private_Macros STM32F413H DISCOVERY LCD Private Macros - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + Z)->X)) -#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Private_Variables STM32F413H DISCOVERY LCD Private Variables - * @{ - */ -LCD_DrawPropTypeDef DrawProp; -static LCD_DrvTypeDef *LcdDrv; -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Private_FunctionPrototypes STM32F413H DISCOVERY LCD Private Functions Prototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3); -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Private_Functions STM32F413H DISCOVERY LCD Private Functions - * @{ - */ -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - return (BSP_LCD_InitEx(LCD_ORIENTATION_LANDSCAPE)); -} -/** - * @brief Initializes the LCD with a given orientation. - * @param orientation: LCD_ORIENTATION_PORTRAIT or LCD_ORIENTATION_LANDSCAPE - * or LCD_ORIENTATION_LANDSCAPE_ROT180 - * @retval LCD state - */ -uint8_t BSP_LCD_InitEx(uint32_t orientation) -{ - uint8_t ret = LCD_ERROR; - - /* Default value for draw propriety */ - DrawProp.BackColor = 0xFFFF; - DrawProp.pFont = &Font24; - DrawProp.TextColor = 0x0000; - - /* Initialize LCD special pins GPIOs */ - BSP_LCD_MspInit(); - - /* Backlight control signal assertion */ - HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET); - - /* Apply hardware reset according to procedure indicated in FRD154BP2901 documentation */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET); - HAL_Delay(5); /* Reset signal asserted during 5ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET); - HAL_Delay(10); /* Reset signal released during 10ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_RESET); - HAL_Delay(20); /* Reset signal asserted during 20ms */ - HAL_GPIO_WritePin(LCD_RESET_GPIO_PORT, LCD_RESET_PIN, GPIO_PIN_SET); - HAL_Delay(10); /* Reset signal released during 10ms */ - - if(ST7789H2_drv.ReadID() == ST7789H2_ID) - { - LcdDrv = &ST7789H2_drv; - - /* LCD Init */ - LcdDrv->Init(); - - if(orientation == LCD_ORIENTATION_PORTRAIT) - { - ST7789H2_SetOrientation(ST7789H2_ORIENTATION_PORTRAIT); - } - else if(orientation == LCD_ORIENTATION_LANDSCAPE_ROT180) - { - ST7789H2_SetOrientation(ST7789H2_ORIENTATION_LANDSCAPE_ROT180); - } - else - { - /* Default landscape orientation is selected */ - } - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - ret = LCD_OK; - } - - return ret; -} - -/** - * @brief DeInitializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_DeInit(void) -{ - /* Actually LcdDrv does not provide a DeInit function */ - return LCD_OK; -} - -/** - * @brief Gets the LCD X size. - * @retval Used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return(LcdDrv->GetLcdPixelWidth()); -} - -/** - * @brief Gets the LCD Y size. - * @retval Used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return(LcdDrv->GetLcdPixelHeight()); -} - -/** - * @brief Gets the LCD text color. - * @retval Used text color. - */ -uint16_t BSP_LCD_GetTextColor(void) -{ - return DrawProp.TextColor; -} - -/** - * @brief Gets the LCD background color. - * @retval Used background color - */ -uint16_t BSP_LCD_GetBackColor(void) -{ - return DrawProp.BackColor; -} - -/** - * @brief Sets the LCD text color. - * @param Color: Text color code - */ -void BSP_LCD_SetTextColor(uint16_t Color) -{ - DrawProp.TextColor = Color; -} - -/** - * @brief Sets the LCD background color. - * @param Color: Background color code - */ -void BSP_LCD_SetBackColor(uint16_t Color) -{ - DrawProp.BackColor = Color; -} - -/** - * @brief Sets the LCD text font. - * @param fonts: Font to be used - */ -void BSP_LCD_SetFont(sFONT *fonts) -{ - DrawProp.pFont = fonts; -} - -/** - * @brief Gets the LCD text font. - * @retval Used font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp.pFont; -} - -/** - * @brief Clears the hole LCD. - * @param Color: Color of the background - */ -void BSP_LCD_Clear(uint16_t Color) -{ - uint32_t counter = 0; - uint32_t y_size = 0; - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = Color; - y_size = BSP_LCD_GetYSize(); - - for(counter = 0; counter < y_size; counter++) - { - BSP_LCD_DrawHLine(0, counter, BSP_LCD_GetXSize()); - } - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Clears the selected line. - * @param Line: Line to be cleared - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - */ -void BSP_LCD_ClearStringLine(uint16_t Line) -{ - uint32_t color_backup = DrawProp.TextColor; - - DrawProp.TextColor = DrawProp.BackColor;; - - /* Draw a rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp.pFont->Height), BSP_LCD_GetXSize(), DrawProp.pFont->Height); - - DrawProp.TextColor = color_backup; - BSP_LCD_SetTextColor(DrawProp.TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: Start column address - * @param Ypos: Line where to display the character shape. - * @param Ascii: Character ascii code - * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp.pFont->table[(Ascii-' ') *\ - DrawProp.pFont->Height * ((DrawProp.pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays characters on the LCD. - * @param Xpos: X position (in pixel) - * @param Ypos: Y position (in pixel) - * @param Text: Pointer to string to display on LCD - * @param Mode: Display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = Text; - - /* Get the text size */ - while (*ptr++) size ++ ; - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize()/DrawProp.pFont->Width); - - switch (Mode) - { - case CENTER_MODE: - { - refcolumn = Xpos + ((xsize - size)* DrawProp.pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = Xpos; - break; - } - case RIGHT_MODE: - { - refcolumn = - Xpos + ((xsize - size)*DrawProp.pFont->Width); - break; - } - default: - { - refcolumn = Xpos; - break; - } - } - - /* Check that the Start column is located in the screen */ - if ((refcolumn < 1) || (refcolumn >= 0x8000)) - { - refcolumn = 1; - } - - /* Send the string character by character on lCD */ - while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp.pFont->Width)) & 0xFFFF) >= DrawProp.pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Ypos, *Text); - /* Decrement the column position by 16 */ - refcolumn += DrawProp.pFont->Width; - /* Point on the next character */ - Text++; - i++; - } -} - -/** - * @brief Displays a character on the LCD. - * @param Line: Line where to display the character shape - * This parameter can be one of the following values: - * @arg 0..9: if the Current fonts is Font16x24 - * @arg 0..19: if the Current fonts is Font12x12 or Font8x12 - * @arg 0..29: if the Current fonts is Font8x8 - * @param ptr: Pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Reads an LCD pixel. - * @param Xpos: X position - * @param Ypos: Y position - * @retval RGB pixel color - */ -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint16_t ret = 0; - - if(LcdDrv->ReadPixel != NULL) - { - ret = LcdDrv->ReadPixel(Xpos, Ypos); - } - - return ret; -} - -/** - * @brief Draws a pixel on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param RGB_Code: Pixel color in RGB mode (5-6-5) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code) -{ - if(LcdDrv->WritePixel != NULL) - { - LcdDrv->WritePixel(Xpos, Ypos, RGB_Code); - } -} - -/** - * @brief Draws an horizontal line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawHLine != NULL) - { - LcdDrv->DrawHLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel((Xpos + index), Ypos, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws a vertical line. - * @param Xpos: X position - * @param Ypos: Y position - * @param Length: Line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t index = 0; - - if(LcdDrv->DrawVLine != NULL) - { - LcdDrv->DrawVLine(DrawProp.TextColor, Xpos, Ypos, Length); - } - else - { - for(index = 0; index < Length; index++) - { - BSP_LCD_DrawPixel(Xpos, Ypos + index, DrawProp.TextColor); - } - } -} - -/** - * @brief Draws an uni-line (between two points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp.TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Draws a rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Draws a circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - current_x = 0; - current_y = Radius; - - while (current_x <= current_y) - { - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp.TextColor); - - BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp.TextColor); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } -} - -/** - * @brief Draws an poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t x = 0, y = 0; - - if(PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y); - - while(--PointCount) - { - x = Points->X; - y = Points->Y; - Points++; - BSP_LCD_DrawLine(x, y, Points->X, Points->Y); - } -} - -/** - * @brief Draws an ellipse on LCD. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do { - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp.TextColor); - - e2 = err; - if (e2 <= x) { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Draws a bitmap picture (16 bpp). - * @param Xpos: Bmp X position in the LCD - * @param Ypos: Bmp Y position in the LCD - * @param pbmp: Pointer to Bmp picture address. - */ -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp) -{ - uint32_t height = 0; - uint32_t width = 0; - - /* Read bitmap width */ - width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16) + (pbmp[21] << 24); - - /* Read bitmap height */ - height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16) + (pbmp[25] << 24); - - SetDisplayWindow(Xpos, Ypos, width, height); - - if(LcdDrv->DrawBitmap != NULL) - { - LcdDrv->DrawBitmap(Xpos, Ypos, pbmp); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws RGB Image (16 bpp). - * @param Xpos: X position in the LCD - * @param Ypos: Y position in the LCD - * @param Xsize: X size in the LCD - * @param Ysize: Y size in the LCD - * @param pdata: Pointer to the RGB Image address. - */ -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata) -{ - - SetDisplayWindow(Xpos, Ypos, Xsize, Ysize); - - if(LcdDrv->DrawRGBImage != NULL) - { - LcdDrv->DrawRGBImage(Xpos, Ypos, Xsize, Ysize, pdata); - } - SetDisplayWindow(0, 0, BSP_LCD_GetXSize(), BSP_LCD_GetYSize()); -} - -/** - * @brief Draws a full rectangle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Width: Rectangle width - * @param Height: Rectangle height - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - BSP_LCD_SetTextColor(DrawProp.TextColor); - do - { - BSP_LCD_DrawHLine(Xpos, Ypos++, Width); - } - while(Height--); -} - -/** - * @brief Draws a full circle. - * @param Xpos: X position - * @param Ypos: Y position - * @param Radius: Circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t decision; /* Decision Variable */ - uint32_t current_x; /* Current X Value */ - uint32_t current_y; /* Current Y Value */ - - decision = 3 - (Radius << 1); - - current_x = 0; - current_y = Radius; - - BSP_LCD_SetTextColor(DrawProp.TextColor); - - while (current_x <= current_y) - { - if(current_y > 0) - { - BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y); - BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y); - } - - if(current_x > 0) - { - BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x); - BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x); - } - if (decision < 0) - { - decision += (current_x << 2) + 6; - } - else - { - decision += ((current_x - current_y) << 2) + 10; - current_y--; - } - current_x++; - } - - BSP_LCD_SetTextColor(DrawProp.TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Draws a full poly-line (between many points). - * @param Points: Pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0; - uint16_t IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0; - - IMAGE_LEFT = IMAGE_RIGHT = Points->X; - IMAGE_TOP= IMAGE_BOTTOM = Points->Y; - - for(counter = 1; counter < PointCount; counter++) - { - pixelX = POLY_X(counter); - if(pixelX < IMAGE_LEFT) - { - IMAGE_LEFT = pixelX; - } - if(pixelX > IMAGE_RIGHT) - { - IMAGE_RIGHT = pixelX; - } - - pixelY = POLY_Y(counter); - if(pixelY < IMAGE_TOP) - { - IMAGE_TOP = pixelY; - } - if(pixelY > IMAGE_BOTTOM) - { - IMAGE_BOTTOM = pixelY; - } - } - - if(PointCount < 2) - { - return; - } - - X_center = (IMAGE_LEFT + IMAGE_RIGHT)/2; - Y_center = (IMAGE_BOTTOM + IMAGE_TOP)/2; - - X_first = Points->X; - Y_first = Points->Y; - - while(--PointCount) - { - X = Points->X; - Y = Points->Y; - Points++; - X2 = Points->X; - Y2 = Points->Y; - - FillTriangle(X, X2, X_center, Y, Y2, Y_center); - FillTriangle(X, X_center, X2, Y, Y_center, Y2); - FillTriangle(X_center, X2, X, Y_center, Y2, Y); - } - - FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center); - FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2); - FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first); -} - -/** - * @brief Draws a full ellipse. - * @param Xpos: X position - * @param Ypos: Y position - * @param XRadius: Ellipse X radius - * @param YRadius: Ellipse Y radius - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2-2*XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2/rad1); - - do - { - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1)); - BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x*2+1; - if (-y == x && e2 <= y) e2 = 0; - } - if (e2 > y) err += ++y*2+1; - } - while (y <= 0); -} - -/** - * @brief Enables the display. - */ -void BSP_LCD_DisplayOn(void) -{ - LcdDrv->DisplayOn(); -} - -/** - * @brief Disables the display. - */ -void BSP_LCD_DisplayOff(void) -{ - LcdDrv->DisplayOff(); -} - -/** - * @brief Initializes the LCD GPIO special pins MSP. - */ -__weak void BSP_LCD_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Enable GPIOs clock */ - LCD_RESET_GPIO_CLK_ENABLE(); - LCD_TE_GPIO_CLK_ENABLE(); - LCD_BL_CTRL_GPIO_CLK_ENABLE(); - - /* LCD_RESET GPIO configuration */ - gpio_init_structure.Pin = LCD_RESET_PIN; /* LCD_RESET pin has to be manually controlled */ - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - HAL_GPIO_Init(LCD_RESET_GPIO_PORT, &gpio_init_structure); - - /* LCD_TE GPIO configuration */ - gpio_init_structure.Pin = LCD_TE_PIN; /* LCD_TE pin has to be manually managed */ - gpio_init_structure.Mode = GPIO_MODE_INPUT; - HAL_GPIO_Init(LCD_TE_GPIO_PORT, &gpio_init_structure); - - /* LCD_BL_CTRL GPIO configuration */ - gpio_init_structure.Pin = LCD_BL_CTRL_PIN; /* LCD_BL_CTRL pin has to be manually controlled */ - gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; - HAL_GPIO_Init(LCD_BL_CTRL_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief DeInitializes LCD GPIO special pins MSP. - */ -__weak void BSP_LCD_MspDeInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* LCD_RESET GPIO deactivation */ - gpio_init_structure.Pin = LCD_RESET_PIN; - HAL_GPIO_DeInit(LCD_RESET_GPIO_PORT, gpio_init_structure.Pin); - - /* LCD_TE GPIO deactivation */ - gpio_init_structure.Pin = LCD_TE_PIN; - HAL_GPIO_DeInit(LCD_TE_GPIO_PORT, gpio_init_structure.Pin); - - /* LCD_BL_CTRL GPIO deactivation */ - gpio_init_structure.Pin = LCD_BL_CTRL_PIN; - HAL_GPIO_DeInit(LCD_BL_CTRL_GPIO_PORT, gpio_init_structure.Pin); - - /* GPIO pins clock can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @} - */ -/****************************************************************************** - Static Functions -*******************************************************************************/ -/** @addtogroup STM32F413H_DISCOVERY_LCD_Private_FunctionPrototypes - * @{ - */ - -/** - * @brief Draws a character on LCD. - * @param Xpos: Line where to display the character shape - * @param Ypos: Start column address - * @param c: Pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line; - - height = DrawProp.pFont->Height; - width = DrawProp.pFont->Width; - - offset = 8 *((width + 7)/8) - width ; - - for(i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7)/8 * i); - - switch(((width + 7)/8)) - { - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0]<< 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if(line & (1 << (width- j + offset- 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp.BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Sets display window. - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -static void SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - if(LcdDrv->SetDisplayWindow != NULL) - { - LcdDrv->SetDisplayWindow(Xpos, Ypos, Width, Height); - } -} - -/** - * @brief Fills a triangle (between 3 points). - * @param x1: Point 1 X position - * @param y1: Point 1 Y position - * @param x2: Point 2 X position - * @param y2: Point 2 Y position - * @param x3: Point 3 X position - * @param y3: Point 3 Y position - */ -static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(x2 - x1); /* The difference between the x's */ - deltay = ABS(y2 - y1); /* The difference between the y's */ - x = x1; /* Start x off at the first pixel */ - y = y1; /* Start y off at the first pixel */ - - if (x2 >= x1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (y2 >= y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, x3, y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.h deleted file mode 100644 index d30396980f..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_lcd.h +++ /dev/null @@ -1,213 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_lcd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32f413h_discovery_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_LCD_H -#define __STM32F413H_DISCOVERY_LCD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery.h" -#include "../Components/st7789h2/st7789h2.h" -#include "../../../Utilities/Fonts/fonts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_LCD - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Exported_Types STM32F413H DISCOVERY LCD Exported Types - * @{ - */ -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -}LCD_DrawPropTypeDef; - -typedef struct -{ - int16_t X; - int16_t Y; -}Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* Center mode */ - RIGHT_MODE = 0x02, /* Right mode */ - LEFT_MODE = 0x03 /* Left mode */ -}Line_ModeTypdef; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Exported_Constants STM32F413H DISCOVERY LCD Exported Constants - * @{ - */ -/** - * @brief LCD status structure definition - */ -#define LCD_OK ((uint8_t)0x00) -#define LCD_ERROR ((uint8_t)0x01) -#define LCD_TIMEOUT ((uint8_t)0x02) - -#define LCD_ORIENTATION_PORTRAIT ((uint8_t)0x00) /*!< Portrait orientation choice of LCD screen */ -#define LCD_ORIENTATION_LANDSCAPE ((uint8_t)0x01) /*!< Landscape orientation choice of LCD screen */ -#define LCD_ORIENTATION_LANDSCAPE_ROT180 ((uint8_t)0x02) /*!< Landscape rotated 180° orientation choice of LCD screen */ - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE ((uint16_t)0x001F) -#define LCD_COLOR_GREEN ((uint16_t)0x07E0) -#define LCD_COLOR_RED ((uint16_t)0xF800) -#define LCD_COLOR_CYAN ((uint16_t)0x07FF) -#define LCD_COLOR_MAGENTA ((uint16_t)0xF81F) -#define LCD_COLOR_YELLOW ((uint16_t)0xFFE0) -#define LCD_COLOR_LIGHTBLUE ((uint16_t)0x841F) -#define LCD_COLOR_LIGHTGREEN ((uint16_t)0x87F0) -#define LCD_COLOR_LIGHTRED ((uint16_t)0xFC10) -#define LCD_COLOR_LIGHTMAGENTA ((uint16_t)0xFC1F) -#define LCD_COLOR_LIGHTYELLOW ((uint16_t)0xFFF0) -#define LCD_COLOR_DARKBLUE ((uint16_t)0x0010) -#define LCD_COLOR_DARKGREEN ((uint16_t)0x0400) -#define LCD_COLOR_DARKRED ((uint16_t)0x8000) -#define LCD_COLOR_DARKCYAN ((uint16_t)0x0410) -#define LCD_COLOR_DARKMAGENTA ((uint16_t)0x8010) -#define LCD_COLOR_DARKYELLOW ((uint16_t)0x8400) -#define LCD_COLOR_WHITE ((uint16_t)0xFFFF) -#define LCD_COLOR_LIGHTGRAY ((uint16_t)0xD69A) -#define LCD_COLOR_GRAY ((uint16_t)0x8410) -#define LCD_COLOR_DARKGRAY ((uint16_t)0x4208) -#define LCD_COLOR_BLACK ((uint16_t)0x0000) -#define LCD_COLOR_BROWN ((uint16_t)0xA145) -#define LCD_COLOR_ORANGE ((uint16_t)0xFD20) - -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font12 - -/** - * @brief LCD special pins - */ -/* LCD reset pin */ -#define LCD_RESET_PIN GPIO_PIN_13 -#define LCD_RESET_GPIO_PORT GPIOB -#define LCD_RESET_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LCD_RESET_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -/* LCD tearing effect pin */ -#define LCD_TE_PIN GPIO_PIN_14 -#define LCD_TE_GPIO_PORT GPIOB -#define LCD_TE_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LCD_TE_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -/* Backlight control pin */ -#define LCD_BL_CTRL_PIN GPIO_PIN_5 -#define LCD_BL_CTRL_GPIO_PORT GPIOE -#define LCD_BL_CTRL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define LCD_BL_CTRL_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_LCD_Exported_Functions STM32F413H DISCOVERY LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint8_t BSP_LCD_InitEx(uint32_t orientation); -uint8_t BSP_LCD_DeInit(void); -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -uint16_t BSP_LCD_GetTextColor(void); -uint16_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetTextColor(__IO uint16_t Color); -void BSP_LCD_SetBackColor(__IO uint16_t Color); -void BSP_LCD_SetFont(sFONT *fonts); -sFONT *BSP_LCD_GetFont(void); - -void BSP_LCD_Clear(uint16_t Color); -void BSP_LCD_ClearStringLine(uint16_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Line_ModeTypdef Mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -uint16_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGB_Code); -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp); -void BSP_LCD_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pbmp); -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/* These functions can be modified in case the current settings - need to be changed for specific application needs */ -void BSP_LCD_MspInit(void); -void BSP_LCD_MspDeInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_LCD_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.c deleted file mode 100644 index 1ac2ca8b19..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.c +++ /dev/null @@ -1,351 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_psram.c - * @author MCD Application Team - * @brief This file includes the PSRAM driver for the IS61WV51216BLL-10MLI memory - * device mounted on STM32F413H-DISCOVERY boards. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - How To use this driver: - ----------------------- - - This driver is used to drive the IS61WV51216BLL-10M PSRAM external memory mounted - on STM32F413H-DisCovERYevaluation board. - - This driver does not need a specific component driver for the PSRAM device - to be included with. - - Driver description: - ------------------ - + Initialization steps: - o Initialize the PSRAM external memory using the BSP_PSRAM_Init() function. This - function includes the MSP layer hardware resources initialization and the - FSMC controller configuration to interface with the external PSRAM memory. - - + PSRAM read/write operations - o PSRAM external memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_PSRAM_ReadData()/BSP_PSRAM_WriteData(), or by DMA transfer using the functions - BSP_PSRAM_ReadData_DMA()/BSP_PSRAM_WriteData_DMA(). - o The AHB access is performed with 16-bit width transaction, the DMA transfer - configuration is fixed at single (no burst) halfword transfer - (see the PSRAM_MspInit() static function). - o User can implement his own functions for read/write access with his desired - configurations. - o If interrupt mode is used for DMA transfer, the function BSP_PSRAM_DMA_IRQHandler() - is called in IRQ handler file, to serve the generated interrupt once the DMA - transfer is complete. - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery_psram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_PSRAM STM32F413H_DISCOVERY PSRAM - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_PSRAM_Private_Variables STM32F413H DISCOVERY PSRAM Private Variables - * @{ - */ -SRAM_HandleTypeDef psramHandle; -static FSMC_NORSRAM_TimingTypeDef Timing; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_PSRAM_Private_Functions STM32F413H DISCOVERY PSRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the PSRAM device. - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_Init(void) -{ - static uint8_t psram_status = PSRAM_ERROR; - /* SRAM device configuration */ - psramHandle.Instance = FSMC_NORSRAM_DEVICE; - psramHandle.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - - /* PSRAM device configuration */ - /* Timing configuration derived from system clock (up to 100Mhz)*/ - Timing.AddressSetupTime = 3; - Timing.AddressHoldTime = 1; - Timing.DataSetupTime = 4; - Timing.BusTurnAroundDuration = 1; - Timing.CLKDivision = 2; - Timing.DataLatency = 2; - Timing.AccessMode = FSMC_ACCESS_MODE_A; - - psramHandle.Init.NSBank = FSMC_NORSRAM_BANK1; - psramHandle.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - psramHandle.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - psramHandle.Init.MemoryDataWidth = PSRAM_MEMORY_WIDTH; - psramHandle.Init.BurstAccessMode = PSRAM_BURSTACCESS; - psramHandle.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - psramHandle.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - psramHandle.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - psramHandle.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - psramHandle.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; - psramHandle.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - psramHandle.Init.WriteBurst = PSRAM_WRITEBURST; - psramHandle.Init.ContinuousClock = CONTINUOUSCLOCK_FEATURE; - - /* PSRAM controller initialization */ - BSP_PSRAM_MspInit(&psramHandle, NULL); /* __weak function can be rewritten by the application */ - if(HAL_SRAM_Init(&psramHandle, &Timing, &Timing) != HAL_OK) - { - psram_status = PSRAM_ERROR; - } - else - { - psram_status = PSRAM_OK; - } - return psram_status; -} - -/** - * @brief DeInitializes the PSRAM device. - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_DeInit(void) -{ - static uint8_t psram_status = PSRAM_ERROR; - /* PSRAM device de-initialization */ - psramHandle.Instance = FSMC_NORSRAM_DEVICE; - psramHandle.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - - if(HAL_SRAM_DeInit(&psramHandle) != HAL_OK) - { - psram_status = PSRAM_ERROR; - } - else - { - psram_status = PSRAM_OK; - } - - /* PSRAM controller de-initialization */ - BSP_PSRAM_MspDeInit(&psramHandle, NULL); - - return psram_status; -} - -/** - * @brief Reads an amount of data from the PSRAM device in polling mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_16b(&psramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return PSRAM_ERROR; - } - else - { - return PSRAM_OK; - } -} - -/** - * @brief Reads an amount of data from the PSRAM device in DMA mode. - * @param uwStartAddress: Read start address - * @param pData: Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Read_DMA(&psramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return PSRAM_ERROR; - } - else - { - return PSRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the PSRAM device in polling mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_16b(&psramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return PSRAM_ERROR; - } - else - { - return PSRAM_OK; - } -} - -/** - * @brief Writes an amount of data from the PSRAM device in DMA mode. - * @param uwStartAddress: Write start address - * @param pData: Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - * @retval PSRAM status - */ -uint8_t BSP_PSRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize) -{ - if(HAL_SRAM_Write_DMA(&psramHandle, (uint32_t *)uwStartAddress, (uint32_t *)pData, uwDataSize) != HAL_OK) - { - return PSRAM_ERROR; - } - else - { - return PSRAM_OK; - } -} - -/** - * @brief Initializes PSRAM MSP. - * @param hsram: PSRAM handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_PSRAM_MspInit(SRAM_HandleTypeDef *hsram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Enable FSMC clock */ - __HAL_RCC_FSMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - PSRAM_DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_FSMC; - - /* GPIOD configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7 |\ - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\ - GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &gpio_init_structure); - - /* GPIOE configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 |\ - GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\ - GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &gpio_init_structure); - - /* GPIOF configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &gpio_init_structure); - - /* GPIOG configuration */ - gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\ - GPIO_PIN_5; - HAL_GPIO_Init(GPIOG, &gpio_init_structure); - - /* Configure common DMA parameters */ - dma_handle.Init.Channel = PSRAM_DMAx_CHANNEL; - dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dma_handle.Init.PeriphInc = DMA_PINC_ENABLE; - dma_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - dma_handle.Init.Mode = DMA_NORMAL; - dma_handle.Init.Priority = DMA_PRIORITY_HIGH; - dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_handle.Init.MemBurst = DMA_MBURST_SINGLE; - dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dma_handle.Instance = PSRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsram, hdma, dma_handle); - - /* Deinitialize the Stream for new transfer */ - HAL_DMA_DeInit(&dma_handle); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&dma_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(PSRAM_DMAx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(PSRAM_DMAx_IRQn); -} - -/** - * @brief DeInitializes SRAM MSP. - * @param hsram: SRAM handle - * @param Params : pointer on additional configuration parameters, can be NULL. - * @retval None - */ -__weak void BSP_PSRAM_MspDeInit(SRAM_HandleTypeDef *hsram, void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(PSRAM_DMAx_IRQn); - - if(hsram->Instance != NULL) - { - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(hsram->hdma); - } - - /* GPIO pins clock, FSMC clock and DMA clock can be shut down in the applications - by surcharging this __weak function */ -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.h deleted file mode 100644 index 266641cb2b..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_psram.h +++ /dev/null @@ -1,108 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413H_discovery_psram.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32f413h_discovery_psram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_PSRAM_H -#define __STM32F413H_DISCOVERY_PSRAM_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_PSRAM - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_PSRAM_Exported_Constants STM32F413H DISCOVERY PSRAM Exported Constants - * @{ - */ - -/** - * @brief PSRAM status structure definition - */ -#define PSRAM_OK ((uint8_t)0x00) -#define PSRAM_ERROR ((uint8_t)0x01) - -#define PSRAM_DEVICE_ADDR ((uint32_t)0x60000000) -#define PSRAM_DEVICE_SIZE ((uint32_t)0x80000) /* SRAM device size in Bytes */ - -#define PSRAM_MEMORY_WIDTH FSMC_NORSRAM_MEM_BUS_WIDTH_16 -#define PSRAM_BURSTACCESS FSMC_BURST_ACCESS_MODE_DISABLE -#define PSRAM_WRITEBURST FSMC_WRITE_BURST_DISABLE -#define CONTINUOUSCLOCK_FEATURE FSMC_CONTINUOUS_CLOCK_SYNC_ONLY - -/* DMA definitions for SRAM DMA transfer */ -#define PSRAM_DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define PSRAM_DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE -#define PSRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define PSRAM_DMAx_STREAM DMA2_Stream5 -#define PSRAM_DMAx_IRQn DMA2_Stream5_IRQn -#define BSP_PSRAM_DMA_IRQHandler DMA2_Stream5_IRQHandler - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_PSRAM_Exported_Functions STM32F413H DISCOVERY PSRAM Exported Functions - * @{ - */ -uint8_t BSP_PSRAM_Init(void); -uint8_t BSP_PSRAM_DeInit(void); -uint8_t BSP_PSRAM_ReadData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_PSRAM_ReadData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_PSRAM_WriteData(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); -uint8_t BSP_PSRAM_WriteData_DMA(uint32_t uwStartAddress, uint16_t *pData, uint32_t uwDataSize); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_PSRAM_MspInit(SRAM_HandleTypeDef *hsram, void *Params); -void BSP_PSRAM_MspDeInit(SRAM_HandleTypeDef *hsram, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_PSRAM_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.c deleted file mode 100644 index 4745cadea2..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.c +++ /dev/null @@ -1,774 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_qspi.c - * @author MCD Application Team - * @brief This file includes a standard driver for the N25Q128A QSPI - * memory mounted on STM32F413H-DISCOVERY board. - * - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - @verbatim - ============================================================================== - ##### How to use this driver ##### - ============================================================================== - [..] - (#) This driver is used to drive the N25Q128A QSPI external - memory mounted on STM32F413H-DISCOVERY board. - - (#) This driver need a specific component driver (N25Q128A) to be included with. - - (#) Initialization steps: - (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This - function includes the MSP layer hardware resources initialization and the - QSPI interface with the external memory. - - (#) QSPI memory operations - (++) QSPI memory can be accessed with read/write operations once it is - initialized. - Read/write operation can be performed with AHB access using the functions - BSP_QSPI_Read()/BSP_QSPI_Write(). - (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. - (see the QSPI memory data sheet) - (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by - specifying the block address. You can perform an erase operation of the whole - chip by calling the function BSP_QSPI_Erase_Chip(). - (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. - (see the QSPI memory data sheet) - @endverbatim - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery_qspi.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_QSPI STM32F413H_DISCOVERY QSPI - * @{ - */ - - -/* Private variables ---------------------------------------------------------*/ - -/** @defgroup STM32F413H_DISCOVERY_QSPI_Private_Variables STM32F413H DISCOVERY Private Variables - * @{ - */ -QSPI_HandleTypeDef QSPIHandle; - -/** - * @} - */ - -/* Private functions ---------------------------------------------------------*/ - -/** @defgroup STM32F413H_DISCOVERY_QSPI_Private_FunctionsPrototypes STM32F413H DISCOVERY Private Functions Prototypes - * @{ - */ -static uint8_t QSPI_ResetMemory (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_DummyCyclesCfg (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_WriteEnable (QSPI_HandleTypeDef *hqspi); -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout); - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_QSPI_Exported_Functions STM32F413H DISCOVERY Exported Functions - * @{ - */ - -/** - * @brief Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Init(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level initialization */ - BSP_QSPI_MspInit(&QSPIHandle, NULL); - - /* QSPI initialization */ - QSPIHandle.Init.ClockPrescaler = 0; /* QSPI freq = 100 MHz/(0+1) = 100 Mhz */ - QSPIHandle.Init.FifoThreshold = 4; - QSPIHandle.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; - QSPIHandle.Init.FlashSize = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1; - QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; /* Min 50ns for nonRead commands */ - QSPIHandle.Init.ClockMode = QSPI_CLOCK_MODE_0; - QSPIHandle.Init.FlashID = QSPI_FLASH_ID_1; - QSPIHandle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; - - if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* QSPI memory reset */ - if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - /* Configuration of the dummy cycles on QSPI memory side */ - if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK) - { - return QSPI_NOT_SUPPORTED; - } - - return QSPI_OK; -} - -/** - * @brief De-Initializes the QSPI interface. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_DeInit(void) -{ - QSPIHandle.Instance = QUADSPI; - - /* Call the DeInit function to reset the driver */ - if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK) - { - return QSPI_ERROR; - } - - /* System level De-initialization */ - BSP_QSPI_MspDeInit(&QSPIHandle, NULL); - - return QSPI_OK; -} - -/** - * @brief Reads an amount of data from the QSPI memory. - * @param pData: Pointer to data to be read - * @param ReadAddr: Read start address - * @param Size: Size of data to read - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the read command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = ReadAddr; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.NbData = Size; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Set S# timing for Read command: Min 20ns for N25Q128A memory */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_2_CYCLE); - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Restore S# timing for nonRead commands */ - MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_5_CYCLE); - - return QSPI_OK; -} - -/** - * @brief Writes an amount of data to the QSPI memory. - * @param pData: Pointer to data to be written - * @param WriteAddr: Write start address - * @param Size: Size of data to write - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size) -{ - QSPI_CommandTypeDef s_command; - uint32_t end_addr, current_size, current_addr; - - /* Calculation of the size between the write address and the end of the page */ - current_size = N25Q128A_PAGE_SIZE - (WriteAddr % N25Q128A_PAGE_SIZE); - - /* Check if the size of the data is less than the remaining place in the page */ - if (current_size > Size) - { - current_size = Size; - } - - /* Initialize the address variables */ - current_addr = WriteAddr; - end_addr = WriteAddr + Size; - - /* Initialize the program command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = EXT_QUAD_IN_FAST_PROG_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Perform the write page by page */ - do - { - s_command.Address = current_addr; - s_command.NbData = current_size; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of program */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update the address and size variables for next page programming */ - current_addr += current_size; - pData += current_size; - current_size = ((current_addr + N25Q128A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q128A_PAGE_SIZE; - } while (current_addr < end_addr); - - return QSPI_OK; -} - -/** - * @brief Erases the specified block of the QSPI memory. - * @param BlockAddress: Block address to erase - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = SUBSECTOR_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_1_LINE; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.Address = BlockAddress; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Erases the entire QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_Erase_Chip(void) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the erase command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = BULK_ERASE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Enable write operations */ - if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Send the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for end of erase */ - if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_BULK_ERASE_MAX_TIME) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief Reads current status of the QSPI memory. - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetStatus(void) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read flag status register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_FLAG_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(&QSPIHandle, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Check the value of the register */ - if ((reg & (N25Q128A_FSR_PRERR | N25Q128A_FSR_VPPERR | N25Q128A_FSR_PGERR | N25Q128A_FSR_ERERR)) != 0) - { - return QSPI_ERROR; - } - else if ((reg & (N25Q128A_FSR_PGSUS | N25Q128A_FSR_ERSUS)) != 0) - { - return QSPI_SUSPENDED; - } - else if ((reg & N25Q128A_FSR_READY) != 0) - { - return QSPI_OK; - } - else - { - return QSPI_BUSY; - } -} - -/** - * @brief Return the configuration of the QSPI memory. - * @param pInfo: pointer on the configuration structure - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_GetInfo(QSPI_Info* pInfo) -{ - /* Configure the structure with the memory configuration */ - pInfo->FlashSize = N25Q128A_FLASH_SIZE; - pInfo->EraseSectorSize = N25Q128A_SUBSECTOR_SIZE; - pInfo->EraseSectorsNumber = (N25Q128A_FLASH_SIZE/N25Q128A_SUBSECTOR_SIZE); - pInfo->ProgPageSize = N25Q128A_PAGE_SIZE; - pInfo->ProgPagesNumber = (N25Q128A_FLASH_SIZE/N25Q128A_PAGE_SIZE); - - return QSPI_OK; -} - -/** - * @brief Configure the QSPI in memory-mapped mode - * @retval QSPI memory status - */ -uint8_t BSP_QSPI_EnableMemoryMappedMode(void) -{ - QSPI_CommandTypeDef s_command; - QSPI_MemoryMappedTypeDef s_mem_mapped_cfg; - - /* Configure the command for the read instruction */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = QUAD_INOUT_FAST_READ_CMD; - s_command.AddressMode = QSPI_ADDRESS_4_LINES; - s_command.AddressSize = QSPI_ADDRESS_24_BITS; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_4_LINES; - s_command.DummyCycles = N25Q128A_DUMMY_CYCLES_READ_QUAD; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the memory mapped mode */ - s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE; - - if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief QSPI MSP Initialization - * This function configures the hardware resources used in this example: - * - Peripheral's clock enable - * - Peripheral's GPIO Configuration - * - NVIC configuration for QSPI interrupt - * @param hqspi: QSPI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /*##-1- Enable peripherals and GPIO Clocks #################################*/ - /* Enable the QuadSPI memory interface clock */ - QSPI_CLK_ENABLE(); - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - /* Enable GPIO clocks */ - QSPI_CS_GPIO_CLK_ENABLE(); - QSPI_CLK_GPIO_CLK_ENABLE(); - QSPI_D0_GPIO_CLK_ENABLE(); - QSPI_D1_GPIO_CLK_ENABLE(); - QSPI_D2_GPIO_CLK_ENABLE(); - QSPI_D3_GPIO_CLK_ENABLE(); - - /*##-2- Configure peripheral GPIO ##########################################*/ - /* QSPI CS GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CS_PIN; - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure); - - /* QSPI CLK GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_CLK_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure); - - /* QSPI D0 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D0_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure); - - /* QSPI D1 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D1_PIN; - gpio_init_structure.Alternate = GPIO_AF10_QSPI; - HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure); - - /* QSPI D2 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D2_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure); - - /* QSPI D3 GPIO pin configuration */ - gpio_init_structure.Pin = QSPI_D3_PIN; - gpio_init_structure.Alternate = GPIO_AF9_QSPI; - HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure); - - /*##-3- Configure the NVIC for QSPI #########################################*/ - /* NVIC configuration for QSPI interrupt */ - HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(QUADSPI_IRQn); -} - - -/** - * @brief QSPI MSP De-Initialization - * This function frees the hardware resources used in this example: - * - Disable the Peripheral's clock - * - Revert GPIO and NVIC configuration to their default state - * @param hqspi: QSPI handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /*##-1- Disable the NVIC for QSPI ###########################################*/ - HAL_NVIC_DisableIRQ(QUADSPI_IRQn); - - /*##-2- Disable peripherals and GPIO Clocks ################################*/ - /* De-Configure QSPI pins */ - HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN); - HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN); - HAL_GPIO_DeInit(QSPI_D0_GPIO_PORT, QSPI_D0_PIN); - HAL_GPIO_DeInit(QSPI_D1_GPIO_PORT, QSPI_D1_PIN); - HAL_GPIO_DeInit(QSPI_D2_GPIO_PORT, QSPI_D2_PIN); - HAL_GPIO_DeInit(QSPI_D3_GPIO_PORT, QSPI_D3_PIN); - - /*##-3- Reset peripherals ##################################################*/ - /* Reset the QuadSPI memory interface */ - QSPI_FORCE_RESET(); - QSPI_RELEASE_RESET(); - - /* Disable the QuadSPI memory interface clock */ - QSPI_CLK_DISABLE(); -} - -/** - * @} - */ - -/** @addtogroup STM32F413H_DISCOVERY_QSPI_Private_Functions - * @{ - */ - -/** - * @brief This function reset the QSPI memory. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - - /* Initialize the reset enable command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = RESET_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Send the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Send the reset memory command */ - s_command.Instruction = RESET_MEMORY_CMD; - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait the memory is ready */ - if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function configure the dummy cycles on memory side. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - uint8_t reg; - - /* Initialize the read volatile configuration register command */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_VOL_CFG_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.NbData = 1; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - /* Configure the command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Reception of the data */ - if (HAL_QSPI_Receive(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Enable write operations */ - if (QSPI_WriteEnable(hqspi) != QSPI_OK) - { - return QSPI_ERROR; - } - - /* Update volatile configuration register (with new dummy cycles) */ - s_command.Instruction = WRITE_VOL_CFG_REG_CMD; - MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY))); - - /* Configure the write volatile configuration register command */ - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Transmission of the data */ - if (HAL_QSPI_Transmit(hqspi, ®, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function send a Write Enable and wait it is effective. - * @param hqspi: QSPI handle - */ -static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Enable write operations */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = WRITE_ENABLE_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_NONE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - /* Configure automatic polling mode to wait for write enabling */ - s_config.Match = N25Q128A_SR_WREN; - s_config.Mask = N25Q128A_SR_WREN; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.DataMode = QSPI_DATA_1_LINE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} - -/** - * @brief This function read the SR of the memory and wait the EOP. - * @param hqspi: QSPI handle - * @param Timeout - */ -static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) -{ - QSPI_CommandTypeDef s_command; - QSPI_AutoPollingTypeDef s_config; - - /* Configure automatic polling mode to wait for memory ready */ - s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE; - s_command.Instruction = READ_STATUS_REG_CMD; - s_command.AddressMode = QSPI_ADDRESS_NONE; - s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; - s_command.DataMode = QSPI_DATA_1_LINE; - s_command.DummyCycles = 0; - s_command.DdrMode = QSPI_DDR_MODE_DISABLE; - s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; - s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; - - s_config.Match = 0; - s_config.Mask = N25Q128A_SR_WIP; - s_config.MatchMode = QSPI_MATCH_MODE_AND; - s_config.StatusBytesSize = 1; - s_config.Interval = 0x10; - s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; - - if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK) - { - return QSPI_ERROR; - } - - return QSPI_OK; -} -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.h deleted file mode 100644 index c9502dcc82..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_qspi.h +++ /dev/null @@ -1,160 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_qspi.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32f413h_discovery_qspi.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_QSPI_H -#define __STM32F413H_DISCOVERY_QSPI_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" -#include "../Components/n25q128a/n25q128a.h" - -/** @addtogroup STM32F413H_DISCOVERY_QSPI - * @{ - */ - - -/* Exported constants --------------------------------------------------------*/ -/** @defgroup STM32F413H_DISCOVERY_QSPI_Exported_Constants STM32F413H DISCOVERY Exported Constants - * @{ - */ -/* QSPI Error codes */ -#define QSPI_OK ((uint8_t)0x00) -#define QSPI_ERROR ((uint8_t)0x01) -#define QSPI_BUSY ((uint8_t)0x02) -#define QSPI_NOT_SUPPORTED ((uint8_t)0x04) -#define QSPI_SUSPENDED ((uint8_t)0x08) - - -/* Definition for QSPI clock resources */ -#define QSPI_CLK_ENABLE() __HAL_RCC_QSPI_CLK_ENABLE() -#define QSPI_CLK_DISABLE() __HAL_RCC_QSPI_CLK_DISABLE() - -#define QSPI_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define QSPI_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() -#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define QSPI_CLK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -#define QSPI_D0_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_D1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define QSPI_D2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() -#define QSPI_D3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() - -#define QSPI_D0_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define QSPI_D1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() -#define QSPI_D2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE() -#define QSPI_D3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define QSPI_FORCE_RESET() __HAL_RCC_QSPI_FORCE_RESET() -#define QSPI_RELEASE_RESET() __HAL_RCC_QSPI_RELEASE_RESET() - -/* Definition for QSPI Pins */ -#define QSPI_CS_PIN GPIO_PIN_6 -#define QSPI_CS_GPIO_PORT GPIOG -#define QSPI_CLK_PIN GPIO_PIN_2 -#define QSPI_CLK_GPIO_PORT GPIOB -#define QSPI_D0_PIN GPIO_PIN_8 -#define QSPI_D0_GPIO_PORT GPIOF -#define QSPI_D1_PIN GPIO_PIN_9 -#define QSPI_D1_GPIO_PORT GPIOF -#define QSPI_D2_PIN GPIO_PIN_2 -#define QSPI_D2_GPIO_PORT GPIOE -#define QSPI_D3_PIN GPIO_PIN_13 -#define QSPI_D3_GPIO_PORT GPIOD - -/* N25Q128A13EF840F Micron memory */ -/* Size of the flash */ -#define QSPI_FLASH_SIZE 23 /* Address bus width to access whole memory space */ -#define QSPI_PAGE_SIZE 256 - -/** - * @} - */ - -/* Exported types ------------------------------------------------------------*/ -/** @defgroup STM32F413H_DISCOVERY_QSPI_Exported_Types STM32F413H DISCOVERY Exported Types - * @{ - */ -/* QSPI Info */ -typedef struct { - uint32_t FlashSize; /*!< Size of the flash */ - uint32_t EraseSectorSize; /*!< Size of sectors for the erase operation */ - uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */ - uint32_t ProgPageSize; /*!< Size of pages for the program operation */ - uint32_t ProgPagesNumber; /*!< Number of pages for the program operation */ -} QSPI_Info; - -/** - * @} - */ - - -/* Exported functions --------------------------------------------------------*/ -/** @defgroup STM32F413H_DISCOVERY_QSPI_Exported_Functions STM32F413H DISCOVERY Exported Functions - * @{ - */ -uint8_t BSP_QSPI_Init (void); -uint8_t BSP_QSPI_DeInit (void); -uint8_t BSP_QSPI_Read (uint8_t* pData, uint32_t ReadAddr, uint32_t Size); -uint8_t BSP_QSPI_Write (uint8_t* pData, uint32_t WriteAddr, uint32_t Size); -uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress); -uint8_t BSP_QSPI_Erase_Chip (void); -uint8_t BSP_QSPI_GetStatus (void); -uint8_t BSP_QSPI_GetInfo (QSPI_Info* pInfo); -uint8_t BSP_QSPI_EnableMemoryMappedMode(void); -/* BSP Aliased function maintained for legacy purpose */ -#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode - -/* These functions can be modified in case the current settings - need to be changed for specific application needs */ -void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params); -void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_QSPI_H */ -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.c deleted file mode 100644 index 3b33033102..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.c +++ /dev/null @@ -1,552 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_sd.c - * @author MCD Application Team - * @brief This file includes the uSD card driver mounted on STM32F413H-DISCOVERY - * board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the micro SD external card mounted on STM32F413H-DISCOVERY - board. - - This driver does not need a specific component driver for the micro SD device - to be included with. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the micro SD card using the BSP_SD_Init() function. This - function includes the MSP layer hardware resources initialization and the - SDIO interface configuration to interface with the external micro SD. It - also includes the micro SD initialization sequence. - o To check the SD card presence you can use the function BSP_SD_IsDetected() which - returns the detection status - o If SD presence detection interrupt mode is desired, you must configure the - SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt - is generated as an external interrupt whenever the micro SD card is - plugged/unplugged in/from the board. - o The function BSP_SD_GetCardInfo() is used to get the micro SD card information - which is stored in the structure "HAL_SD_CardInfoTypeDef". - - + Micro SD card operations - o The micro SD card can be accessed with read/write block(s) operations once - it is ready for access. The access can be performed whether using the polling - mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA - transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA() - o The DMA transfer complete is used with interrupt mode. Once the SD transfer - is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(), - the DMA Tx/Rx transfer complete are handled using the functions - BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks - are implemented by the user at application level. - o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying - the number of blocks to erase. - o The SD runtime status is returned when calling the function BSP_SD_GetCardState(). - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery_sd.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_SD STM32F413H_DISCOVERY SD - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_SD_Private_Variables STM32F413H DISCOVERY SD Private Variables - * @{ - */ -SD_HandleTypeDef uSdHandle; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_SD_Private_Functions STM32F413H DISCOVERY SD Private Functions - * @{ - */ - -/** - * @brief Initializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_Init(void) -{ - uint8_t sd_state = MSD_OK; - - /* uSD device interface configuration */ - uSdHandle.Instance = SDIO; - - uSdHandle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; - uSdHandle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; - uSdHandle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; - uSdHandle.Init.BusWide = SDIO_BUS_WIDE_1B; - uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_ENABLE; - uSdHandle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV; - - /* Msp SD Detect pin initialization */ - BSP_SD_Detect_MspInit(&uSdHandle, NULL); - - /* Check if SD card is present */ - if(BSP_SD_IsDetected() != SD_PRESENT) - { - return MSD_ERROR_SD_NOT_PRESENT; - } - - /* Msp SD initialization */ - BSP_SD_MspInit(&uSdHandle, NULL); - - /* HAL SD initialization */ - if(HAL_SD_Init(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Configure SD Bus width */ - if(sd_state == MSD_OK) - { - /* Enable wide operation */ - if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDIO_BUS_WIDE_4B) != HAL_OK) - { - sd_state = MSD_ERROR; - } - else - { - sd_state = MSD_OK; - } - } - - return sd_state; -} - -/** - * @brief DeInitializes the SD card device. - * @retval SD status - */ -uint8_t BSP_SD_DeInit(void) -{ - uint8_t sd_state = MSD_OK; - - uSdHandle.Instance = SDIO; - - /* HAL SD deinitialization */ - if(HAL_SD_DeInit(&uSdHandle) != HAL_OK) - { - sd_state = MSD_ERROR; - } - - /* Msp SD deinitialization */ - uSdHandle.Instance = SDIO; - BSP_SD_MspDeInit(&uSdHandle, NULL); - - return sd_state; -} - -/** - * @brief Configures Interrupt mode for SD detection pin. - * @retval Returns MSD_OK - */ -uint8_t BSP_SD_ITConfig(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Configure Interrupt mode for SD detection pin */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_RISING_FALLING; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); - - /* Enable and set SD detect EXTI Interrupt to the lowest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(SD_DETECT_EXTI_IRQn), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(SD_DETECT_EXTI_IRQn)); - - return MSD_OK; -} - -/** - * @brief Detects if SD card is correctly plugged in the memory slot or not. - * @retval Returns if SD is detected or not - */ -uint8_t BSP_SD_IsDetected(void) -{ - __IO uint8_t status = SD_PRESENT; - - /* Check SD card detect pin */ - if (HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == GPIO_PIN_SET) - { - status = SD_NOT_PRESENT; - } - - return status; -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @param Timeout: Timeout for read operation - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in polling mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @param Timeout: Timeout for write operation - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) -{ - if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Reads block(s) from a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param ReadAddr: Address from where data is to be read - * @param NumOfBlocks: Number of SD blocks to read - * @retval SD status - */ -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks) -{ - /* Read block(s) in DMA transfer mode */ - if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Writes block(s) to a specified address in an SD card, in DMA mode. - * @param pData: Pointer to the buffer that will contain the data to transmit - * @param WriteAddr: Address from where data is to be written - * @param NumOfBlocks: Number of SD blocks to write - * @retval SD status - */ -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks) -{ - /* Write block(s) in DMA transfer mode */ - if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Erases the specified memory area of the given SD card. - * @param StartAddr: Start byte address - * @param EndAddr: End byte address - * @retval SD status - */ -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr) -{ - if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK) - { - return MSD_ERROR; - } - else - { - return MSD_OK; - } -} - -/** - * @brief Initializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Enable SDIO clock */ - __HAL_RCC_SDIO_CLK_ENABLE(); - - /* Enable DMA2 clocks */ - __DMAx_TxRx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - - /* Common GPIO configuration */ - gpio_init_structure.Mode = GPIO_MODE_AF_PP; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - gpio_init_structure.Alternate = GPIO_AF12_SDIO; - - /* GPIOC configuration: SD_D[0..3] and SD_clk */ - gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12; - - HAL_GPIO_Init(GPIOC, &gpio_init_structure); - - /* GPIOA configuration: SD cmd */ - gpio_init_structure.Pin = GPIO_PIN_6; - HAL_GPIO_Init(GPIOA, &gpio_init_structure); - - /* NVIC configuration for SDIO interrupts */ - HAL_NVIC_SetPriority(SDIO_IRQn, 0x0E, 0x00); - HAL_NVIC_EnableIRQ(SDIO_IRQn); - - /* Configure DMA Rx parameters */ - dma_rx_handle.Init.Channel = SD_DMAx_Rx_CHANNEL; - dma_rx_handle.Init.Direction = DMA_PERIPH_TO_MEMORY; - dma_rx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_rx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_rx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_rx_handle.Init.Mode = DMA_PFCTRL; - dma_rx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_rx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_rx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_rx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_rx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_rx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_rx_handle); - - /* Configure DMA Tx parameters */ - dma_tx_handle.Init.Channel = SD_DMAx_Tx_CHANNEL; - dma_tx_handle.Init.Direction = DMA_MEMORY_TO_PERIPH; - dma_tx_handle.Init.PeriphInc = DMA_PINC_DISABLE; - dma_tx_handle.Init.MemInc = DMA_MINC_ENABLE; - dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dma_tx_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dma_tx_handle.Init.Mode = DMA_PFCTRL; - dma_tx_handle.Init.Priority = DMA_PRIORITY_VERY_HIGH; - dma_tx_handle.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - dma_tx_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dma_tx_handle.Init.MemBurst = DMA_MBURST_INC4; - dma_tx_handle.Init.PeriphBurst = DMA_PBURST_INC4; - - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dma_tx_handle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dma_tx_handle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0x00); - HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn); -} - -/** - * @brief Initializes the SD Detect pin MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params) -{ - GPIO_InitTypeDef gpio_init_structure; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - SD_DETECT_GPIO_CLK_ENABLE(); - - /* GPIO configuration in input for uSD_Detect signal */ - gpio_init_structure.Pin = SD_DETECT_PIN; - gpio_init_structure.Mode = GPIO_MODE_INPUT; - gpio_init_structure.Pull = GPIO_PULLUP; - gpio_init_structure.Speed = GPIO_SPEED_HIGH; - HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure); -} - -/** - * @brief DeInitializes the SD MSP. - * @param hsd: SD handle - * @param Params : pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params) -{ - static DMA_HandleTypeDef dma_rx_handle; - static DMA_HandleTypeDef dma_tx_handle; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(Params); - - /* Disable NVIC for DMA transfer complete interrupts */ - HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn); - HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_rx_handle.Instance = SD_DMAx_Rx_STREAM; - HAL_DMA_DeInit(&dma_rx_handle); - - /* Deinitialize the stream for new transfer */ - dma_tx_handle.Instance = SD_DMAx_Tx_STREAM; - HAL_DMA_DeInit(&dma_tx_handle); - - /* Disable NVIC for SDIO interrupts */ - HAL_NVIC_DisableIRQ(SDIO_IRQn); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* Disable SDIO clock */ - __HAL_RCC_SDIO_CLK_DISABLE(); - - /* GPIO pins clock and DMA clocks can be shut down in the application - by surcharging this __weak function */ -} - -/** - * @brief Gets the current SD card data status. - * @retval Data transfer state. - * This value can be one of the following values: - * @arg SD_TRANSFER_OK: No data transfer is acting - * @arg SD_TRANSFER_BUSY: Data transfer is acting - */ -uint8_t BSP_SD_GetCardState(void) -{ - return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY); -} - - -/** - * @brief Get SD information about specific SD card. - * @param CardInfo: Pointer to HAL_SD_CardInfoTypedef structure - */ -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo) -{ - /* Get SD card Information */ - HAL_SD_GetCardInfo(&uSdHandle, CardInfo); -} - -/** - * @brief SD Abort callbacks - * @param hsd: SD handle - */ -void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_AbortCallback(); -} - -/** - * @brief Tx Transfer completed callbacks - * @param hsd: SD handle - */ -void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_WriteCpltCallback(); -} - -/** - * @brief Rx Transfer completed callbacks - * @param hsd: SD handle - */ -void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) -{ - BSP_SD_ReadCpltCallback(); -} - -/** - * @brief BSP SD Abort callbacks - */ -__weak void BSP_SD_AbortCallback(void) -{ - -} - -/** - * @brief BSP Tx Transfer completed callbacks - */ -__weak void BSP_SD_WriteCpltCallback(void) -{ - -} - -/** - * @brief BSP Rx Transfer completed callbacks - */ -__weak void BSP_SD_ReadCpltCallback(void) -{ - -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.h deleted file mode 100644 index 3c92fff72c..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_sd.h +++ /dev/null @@ -1,136 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_sd.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32413h_discovery_sd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_SD_H -#define __STM32F413H_DISCOVERY_SD_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_SD - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_SD_Private_Variables - * @{ - */ - -/** - * @brief SD Card information structure - */ -#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_SD_Exported_Constants STM32F413H DISCOVERY SD Exported Constants - * @{ - */ - -/** - * @brief SD status structure definition - */ -#define MSD_OK ((uint8_t)0x00) -#define MSD_ERROR ((uint8_t)0x01) -#define MSD_ERROR_SD_NOT_PRESENT ((uint8_t)0x02) - -/** - * @brief SD transfer state definition - */ -#define SD_TRANSFER_OK ((uint8_t)0x00) -#define SD_TRANSFER_BUSY ((uint8_t)0x01) -#define SD_PRESENT ((uint8_t)0x01) -#define SD_NOT_PRESENT ((uint8_t)0x00) - -#define SD_DATATIMEOUT ((uint32_t)100000000) - -/* DMA definitions for SD DMA transfer */ -#define __DMAx_TxRx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SD_DMAx_Tx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Rx_CHANNEL DMA_CHANNEL_4 -#define SD_DMAx_Tx_STREAM DMA2_Stream6 -#define SD_DMAx_Rx_STREAM DMA2_Stream3 -#define SD_DMAx_Tx_IRQn DMA2_Stream6_IRQn -#define SD_DMAx_Rx_IRQn DMA2_Stream3_IRQn -#define BSP_SD_IRQHandler SDIO_IRQHandler -#define BSP_SD_DMA_Tx_IRQHandler DMA2_Stream6_IRQHandler -#define BSP_SD_DMA_Rx_IRQHandler DMA2_Stream3_IRQHandler -#define SD_DetectIRQHandler() HAL_GPIO_EXTI_IRQHandler(SD_DETECT_PIN) -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_SD_Exported_Functions STM32F413H DISCOVERY SD Exported Functions - * @{ - */ -uint8_t BSP_SD_Init(void); -uint8_t BSP_SD_DeInit(void); -uint8_t BSP_SD_ITConfig(void); -uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout); -uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks); -uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr); -uint8_t BSP_SD_GetCardState(void); -void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo); -uint8_t BSP_SD_IsDetected(void); - -/* These functions can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params); -void BSP_SD_AbortCallback(void); -void BSP_SD_WriteCpltCallback(void); -void BSP_SD_ReadCpltCallback(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_SD_H */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.c b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.c deleted file mode 100644 index fbd2ca1bf6..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.c +++ /dev/null @@ -1,502 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the Touch - * Screen on STM32F413h-DISCOVERY evaluation board. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive the touch screen module of the STM32F413H-DISCOVERY - evaluation board on the FRIDA LCD mounted on MB1209 daughter board. - The touch screen driver IC is a FT6x36 type which share the same register naming - with FT6206 type. - -2. Driver description: ---------------------- - + Initialization steps: - o Initialize the TS module using the BSP_TS_Init() function. This - function includes the MSP layer hardware resources initialization and the - communication layer configuration to start the TS use. The LCD size properties - (x and y) are passed as parameters. - o If TS interrupt mode is desired, you must configure the TS interrupt mode - by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated - as an external interrupt whenever a touch is detected. - - + Touch screen use - o The touch screen state is captured whenever the function BSP_TS_GetState() is - used. This function returns information about the last LCD touch occurred - in the TS_StateTypeDef structure. -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery.h" -#include "stm32f413h_discovery_ts.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_TS STM32F413H_DISCOVERY TS - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_TS_Private_Variables STM32F413H DISCOVERY TS Private Variables - * @{ - */ -static TS_DrvTypeDef *tsDriver; -static uint8_t I2C_Address = 0; -static uint8_t tsOrientation = TS_SWAP_NONE; - -/* Table for touchscreen event information display on LCD : table indexed on enum @ref TS_TouchEventTypeDef information */ -char * ts_event_string_tab[TOUCH_EVENT_NB_MAX] = { "None", - "Press down", - "Lift up", - "Contact" - }; - -/* Table for touchscreen gesture Id information display on LCD : table indexed on enum @ref TS_GestureIdTypeDef information */ -char * ts_gesture_id_string_tab[GEST_ID_NB_MAX] = { "None", - "Move Up", - "Move Right", - "Move Down", - "Move Left", - "Zoom In", - "Zoom Out" - }; -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_TS_Private_Functions STM32F413H DISCOVERY TS Private Functions - * @{ - */ -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..). - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY) -{ - return (BSP_TS_InitEx(ts_SizeX, ts_SizeY, TS_ORIENTATION_LANDSCAPE)); -} - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, I2C, clocks..) - * with a given orientation - * @param ts_SizeX : Maximum X size of the TS area on LCD - * @param ts_SizeY : Maximum Y size of the TS area on LCD - * @param orientation : TS_ORIENTATION_LANDSCAPE or TS_ORIENTATION_PORTRAIT - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_InitEx(uint16_t ts_SizeX, uint16_t ts_SizeY, uint8_t orientation) -{ - uint8_t ts_status = TS_OK; - - /* Note : I2C_Address is un-initialized here, but is not used at all in init function */ - /* but the prototype of Init() is like that in template and should be respected */ - - /* Initialize the communication channel to sensor (I2C) if necessary */ - /* that is initialization is done only once after a power up */ -#if defined (USE_STM32F413H_DISCOVERY_REVE) - ft3x67_ts_drv.Init(I2C_Address); - - if(ft3x67_ts_drv.ReadID(TS_I2C_ADDRESS) == FT3X67_ID_VALUE) - { - /* Found FT3x67 : Initialize the TS driver structure */ - tsDriver = &ft3x67_ts_drv; - - I2C_Address = TS_I2C_ADDRESS; - - /* Get LCD chosen orientation */ - if(orientation == TS_ORIENTATION_PORTRAIT) - { - tsOrientation = TS_SWAP_Y; - } - else if(orientation == TS_ORIENTATION_LANDSCAPE_ROT180) - { - tsOrientation = TS_SWAP_XY; - } - else - { - tsOrientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - tsDriver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - tsDriver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } -#else /* USE_STM32413H_DISCOVERY */ - ft6x06_ts_drv.Init(I2C_Address); - - /* Scan TouchScreen IC controller ID register by I2C Read */ - /* Verify this is a FT6x36 or FT3x67, otherwise this is an error case */ - if(ft6x06_ts_drv.ReadID(TS_I2C_ADDRESS) == FT6x36_ID_VALUE) - { - /* Found FT6x36 : Initialize the TS driver structure */ - tsDriver = &ft6x06_ts_drv; - - I2C_Address = TS_I2C_ADDRESS; - - /* Get LCD chosen orientation */ - if(orientation == TS_ORIENTATION_PORTRAIT) - { - tsOrientation = TS_SWAP_Y; - } - else if(orientation == TS_ORIENTATION_LANDSCAPE_ROT180) - { - tsOrientation = TS_SWAP_XY; - } - else - { - tsOrientation = TS_SWAP_XY | TS_SWAP_Y; - } - - if(ts_status == TS_OK) - { - /* Software reset the TouchScreen */ - tsDriver->Reset(I2C_Address); - - /* Calibrate, Configure and Start the TouchScreen driver */ - tsDriver->Start(I2C_Address); - - } /* of if(ts_status == TS_OK) */ - } -#endif /* USE_STM32F413H_DISCOVERY_REVE */ - else - { - ts_status = TS_DEVICE_NOT_FOUND; - } - - return (ts_status); -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - uint8_t ts_status = TS_OK; - - /* Msp Init of GPIO used for TS_INT pin coming from TouchScreen driver IC FT6x36 */ - /* When touchscreen is operated in interrupt mode */ - BSP_TS_INT_MspInit(); - - /* Enable and set the TS_INT EXTI Interrupt to an intermediate priority */ - HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn)); - - /* Enable the TS in interrupt mode */ - /* In that case the INT output of FT6206 when new touch is available */ - /* is active on low level and directed on EXTI */ - tsDriver->EnableIT(I2C_Address); - - return (ts_status); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State) -{ - static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0}; - static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0}; - uint8_t ts_status = TS_OK; - uint16_t tmp; - uint16_t Raw_x[TS_MAX_NB_TOUCH]; - uint16_t Raw_y[TS_MAX_NB_TOUCH]; - uint16_t xDiff; - uint16_t yDiff; - uint32_t index; -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint32_t weight = 0; - uint32_t area = 0; - uint32_t event = 0; -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - /* Check and update the number of touches active detected */ - TS_State->touchDetected = tsDriver->DetectTouch(I2C_Address); - if(TS_State->touchDetected) - { - for(index=0; index < TS_State->touchDetected; index++) - { - /* Get each touch coordinates */ - tsDriver->GetXY(I2C_Address, &(Raw_x[index]), &(Raw_y[index])); - - if(tsOrientation & TS_SWAP_XY) - { - tmp = Raw_x[index]; - Raw_x[index] = Raw_y[index]; - Raw_y[index] = tmp; - } -#if defined (USE_STM32F413H_DISCOVERY_REVE) - if(tsOrientation & TS_SWAP_X) - { - Raw_x[index] = TS_MAX_WIDTH_HEIGHT - 1 - Raw_x[index]; - } - - if(tsOrientation & TS_SWAP_Y) - { - Raw_y[index] = TS_MAX_WIDTH_HEIGHT - 1 - Raw_y[index]; - } -#else /* USE_STM32413H_DISCOVERY */ - if(tsOrientation & TS_SWAP_X) - { - Raw_x[index] = FT_6206_MAX_WIDTH_HEIGHT - 1 - Raw_x[index]; - } - - if(tsOrientation & TS_SWAP_Y) - { - Raw_y[index] = FT_6206_MAX_WIDTH_HEIGHT - 1 - Raw_y[index]; - } -#endif /* USE_STM32F413H_DISCOVERY_REVE */ - xDiff = Raw_x[index] > _x[index]? (Raw_x[index] - _x[index]): (_x[index] - Raw_x[index]); - yDiff = Raw_y[index] > _y[index]? (Raw_y[index] - _y[index]): (_y[index] - Raw_y[index]); - - if ((xDiff + yDiff) > 5) - { - _x[index] = Raw_x[index]; - _y[index] = Raw_y[index]; - } - - - TS_State->touchX[index] = _x[index]; - TS_State->touchY[index] = _y[index]; - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - - /* Get touch info related to the current touch */ -#if defined (USE_STM32F413H_DISCOVERY_REVE) - ft3x67_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event); -#else /* USE_STM32413H_DISCOVERY */ - ft6x06_TS_GetTouchInfo(I2C_Address, index, &weight, &area, &event); -#endif /* USE_STM32F413H_DISCOVERY_REVE */ - /* Update TS_State structure */ - TS_State->touchWeight[index] = weight; - TS_State->touchArea[index] = area; -#if defined (USE_STM32F413H_DISCOVERY_REVE) - /* Remap touch event */ - switch(event) - { - - case FT3X67_TOUCH_EVT_FLAG_PRESS_DOWN : - TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; - break; - case FT3X67_TOUCH_EVT_FLAG_LIFT_UP : - TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; - break; - case FT3X67_TOUCH_EVT_FLAG_CONTACT : - TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; - break; - case FT3X67_TOUCH_EVT_FLAG_NO_EVENT : - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(event) */ -#else /* USE_STM32413H_DISCOVERY */ - /* Remap touch event */ - switch(event) - { - - case FT6206_TOUCH_EVT_FLAG_PRESS_DOWN : - TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; - break; - case FT6206_TOUCH_EVT_FLAG_LIFT_UP : - TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; - break; - case FT6206_TOUCH_EVT_FLAG_CONTACT : - TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; - break; - case FT6206_TOUCH_EVT_FLAG_NO_EVENT : - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(event) */ -#endif /* USE_STM32F413H_DISCOVERY_REVE */ -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* of for(index=0; index < TS_State->touchDetected; index++) */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - /* Get gesture Id */ - ts_status = BSP_TS_Get_GestureId(TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - - } /* end of if(TS_State->touchDetected != 0) */ - - return (ts_status); -} - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -/** - * @brief Update gesture Id following a touch detected. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State) -{ - uint32_t gestureId = 0; - uint8_t ts_status = TS_OK; - -#if defined (USE_STM32F413H_DISCOVERY_REVE) - /* Get gesture Id */ - ft3x67_TS_GetGestureID(I2C_Address, &gestureId); - - /* Remap gesture Id to a TS_GestureIdTypeDef value */ - switch(gestureId) - { - case FT3X67_GEST_ID_NO_GESTURE : - TS_State->gestureId = GEST_ID_NO_GESTURE; - break; - case FT3X67_GEST_ID_MOVE_UP : - TS_State->gestureId = GEST_ID_MOVE_UP; - break; - case FT3X67_GEST_ID_MOVE_RIGHT : - TS_State->gestureId = GEST_ID_MOVE_RIGHT; - break; - case FT3X67_GEST_ID_MOVE_DOWN : - TS_State->gestureId = GEST_ID_MOVE_DOWN; - break; - case FT3X67_GEST_ID_MOVE_LEFT : - TS_State->gestureId = GEST_ID_MOVE_LEFT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(gestureId) */ -#else /* USE_STM32413H_DISCOVERY */ - /* Get gesture Id */ - ft6x06_TS_GetGestureID(I2C_Address, &gestureId); - - /* Remap gesture Id to a TS_GestureIdTypeDef value */ - switch(gestureId) - { - case FT6206_GEST_ID_NO_GESTURE : - TS_State->gestureId = GEST_ID_NO_GESTURE; - break; - case FT6206_GEST_ID_MOVE_UP : - TS_State->gestureId = GEST_ID_MOVE_UP; - break; - case FT6206_GEST_ID_MOVE_RIGHT : - TS_State->gestureId = GEST_ID_MOVE_RIGHT; - break; - case FT6206_GEST_ID_MOVE_DOWN : - TS_State->gestureId = GEST_ID_MOVE_DOWN; - break; - case FT6206_GEST_ID_MOVE_LEFT : - TS_State->gestureId = GEST_ID_MOVE_LEFT; - break; - case FT6206_GEST_ID_ZOOM_IN : - TS_State->gestureId = GEST_ID_ZOOM_IN; - break; - case FT6206_GEST_ID_ZOOM_OUT : - TS_State->gestureId = GEST_ID_ZOOM_OUT; - break; - default : - ts_status = TS_ERROR; - break; - } /* of switch(gestureId) */ -#endif /* USE_STM32F413H_DISCOVERY_REVE */ - return(ts_status); -} - -/** - * @brief Function used to reset all touch data before a new acquisition - * of touch information. - * @param TS_State: Pointer to touch screen current state structure - * @retval TS_OK if OK, TE_ERROR if problem found. - */ -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State) -{ - uint8_t ts_status = TS_ERROR; - uint32_t index; - - if (TS_State != (TS_StateTypeDef *)NULL) - { - TS_State->gestureId = GEST_ID_NO_GESTURE; - TS_State->touchDetected = 0; - - for(index = 0; index < TS_MAX_NB_TOUCH; index++) - { - TS_State->touchX[index] = 0; - TS_State->touchY[index] = 0; - TS_State->touchArea[index] = 0; - TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT; - TS_State->touchWeight[index] = 0; - } - - ts_status = TS_OK; - - } /* of if (TS_State != (TS_StateTypeDef *)NULL) */ - - return (ts_status); -} -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -/** - * @brief Initializes the TS_INT pin MSP. - */ -__weak void BSP_TS_INT_MspInit(void) -{ - GPIO_InitTypeDef gpio_init_structure; - - TS_INT_GPIO_CLK_ENABLE(); - - /* Configure Interrupt mode for TS_INT pin falling edge : when a new touch is available */ - /* TS_INT pin is active on low level on new touch available */ - gpio_init_structure.Pin = TS_INT_PIN; - gpio_init_structure.Pull = GPIO_NOPULL; - gpio_init_structure.Speed = GPIO_SPEED_FAST; - gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.h b/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.h deleted file mode 100644 index eb5e98bc7b..0000000000 --- a/Drivers/BSP/STM32F413H-Discovery/stm32f413h_discovery_ts.h +++ /dev/null @@ -1,204 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f413h_discovery_ts.h - * @author MCD Application Team - * @brief This file contains the common defines and functions prototypes for - * the stm32f413h_discovery_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F413H_DISCOVERY_TS_H -#define __STM32F413H_DISCOVERY_TS_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f413h_discovery.h" -#include "stm32f413h_discovery_lcd.h" - -/* Include TouchScreen component driver */ -#if defined (USE_STM32F413H_DISCOVERY_REVE) -#include "../Components/ft3x67/ft3x67.h" -#else /* USE_STM32F413H_DISCOVERY */ -#include "../Components/ft6x06/ft6x06.h" -#endif /* USE_STM32F413H_DISCOVERY_REVE */ -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F413H_DISCOVERY_TS - * @{ - */ - -/** @defgroup STM32F413H_DISCOVERY_TS_Exported_Constants STM32F413H DISCOVERY TS Exported Constants - * @{ - */ -/** @brief With FT6206 and FT3X67 : maximum 2 touches detected simultaneously - */ -#if defined (USE_STM32F413H_DISCOVERY_REVE) -#define TS_MAX_NB_TOUCH ((uint32_t) FT3X67_MAX_DETECTABLE_TOUCH) -#define TS_MAX_WIDTH_HEIGHT ((uint16_t)240) -#else /* USE_STM32F413H_DISCOVERY */ -#define TS_MAX_NB_TOUCH ((uint32_t) FT6206_MAX_DETECTABLE_TOUCH) -#endif /* USE_STM32F413H_DISCOVERY_REVE */ - -#define TS_NO_IRQ_PENDING ((uint8_t) 0) -#define TS_IRQ_PENDING ((uint8_t) 1) - -#define TS_SWAP_NONE ((uint8_t) 0x01) -#define TS_SWAP_X ((uint8_t) 0x02) -#define TS_SWAP_Y ((uint8_t) 0x04) -#define TS_SWAP_XY ((uint8_t) 0x08) - -#define TS_ORIENTATION_PORTRAIT ((uint8_t) 0) -#define TS_ORIENTATION_LANDSCAPE ((uint8_t) 1) -#define TS_ORIENTATION_LANDSCAPE_ROT180 ((uint8_t) 2) - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_TS_Exported_Types STM32F413H DISCOVERY TS Exported Types - * @{ - */ -/** -* @brief TS_StateTypeDef -* Define TS State structure -*/ -typedef struct -{ - uint8_t touchDetected; /*!< Total number of active touches detected at last scan */ - uint16_t touchX[TS_MAX_NB_TOUCH]; /*!< Touch X[0], X[1] coordinates on 12 bits */ - uint16_t touchY[TS_MAX_NB_TOUCH]; /*!< Touch Y[0], Y[1] coordinates on 12 bits */ - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) - uint8_t touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */ - uint8_t touchEventId[TS_MAX_NB_TOUCH]; /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */ - uint8_t touchArea[TS_MAX_NB_TOUCH]; /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */ - uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */ -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ -}TS_StateTypeDef; - -/** - * @brief TS_StatusTypeDef - * Define BSP_TS_xxx() functions possible return value, - * when status is returned by those functions. - */ -typedef enum -{ - TS_OK = 0x00, /*!< Touch Ok */ - TS_ERROR = 0x01, /*!< Touch Error */ - TS_TIMEOUT = 0x02, /*!< Touch Timeout */ - TS_DEVICE_NOT_FOUND = 0x03 /*!< Touchscreen device not found */ -} TS_StatusTypeDef; - - -/** - * @brief TS_GestureIdTypeDef - * Define Possible managed gesture identification values returned by touch screen - * driver. - */ -typedef enum -{ - GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */ - GEST_ID_MOVE_UP = 0x01, /*!< Gesture Move Up */ - GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */ - GEST_ID_MOVE_DOWN = 0x03, /*!< Gesture Move Down */ - GEST_ID_MOVE_LEFT = 0x04, /*!< Gesture Move Left */ - GEST_ID_ZOOM_IN = 0x05, /*!< Gesture Zoom In */ - GEST_ID_ZOOM_OUT = 0x06, /*!< Gesture Zoom Out */ - GEST_ID_NB_MAX = 0x07 /*!< max number of gesture id */ -} TS_GestureIdTypeDef; - -/** - * @brief TS_TouchEventTypeDef - * Define Possible touch events kind as returned values - * by touch screen IC Driver. - */ -typedef enum -{ - TOUCH_EVENT_NO_EVT = 0x00, /*!< Touch Event : undetermined */ - TOUCH_EVENT_PRESS_DOWN = 0x01, /*!< Touch Event Press Down */ - TOUCH_EVENT_LIFT_UP = 0x02, /*!< Touch Event Lift Up */ - TOUCH_EVENT_CONTACT = 0x03, /*!< Touch Event Contact */ - TOUCH_EVENT_NB_MAX = 0x04 /*!< max number of touch events kind */ -} TS_TouchEventTypeDef; - -/** - * @} - */ - -/** @defgroup STM32F413H_DISCOVERY_TS_Imported_Variables STM32F413H DISCOVERY TS Imported Variables - * @{ - */ -/** - * @brief Table for touchscreen event information display on LCD : - * table indexed on enum @ref TS_TouchEventTypeDef information - */ -extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX]; - -/** - * @brief Table for touchscreen gesture Id information display on LCD : table indexed - * on enum @ref TS_GestureIdTypeDef information - */ -extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX]; -/** - * @} - */ -/** @defgroup STM32F413H_DISCOVERY_TS_Exported_Functions STM32F413H DISCOVERY TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY); -uint8_t BSP_TS_InitEx(uint16_t ts_SizeX, uint16_t ts_SizeY, uint8_t orientation); -uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State); - -#if (TS_MULTI_TOUCH_SUPPORTED == 1) -uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State); -uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State); -#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ - -uint8_t BSP_TS_ITConfig(void); - -/* These __weak function can be surcharged by application code in case the current settings - need to be changed for specific (example GPIO allocation) */ -void BSP_TS_INT_MspInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F413H_DISCOVERY_TS_H */ diff --git a/Drivers/BSP/STM32F429I-Discovery b/Drivers/BSP/STM32F429I-Discovery new file mode 160000 index 0000000000..d77779a2a4 --- /dev/null +++ b/Drivers/BSP/STM32F429I-Discovery @@ -0,0 +1 @@ +Subproject commit d77779a2a4e950246752a4397e2adf40c25829f9 diff --git a/Drivers/BSP/STM32F429I-Discovery/LICENSE.md b/Drivers/BSP/STM32F429I-Discovery/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F429I-Discovery/README.md b/Drivers/BSP/STM32F429I-Discovery/README.md deleted file mode 100644 index bc32734141..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# BSP STM32F429I-DISCOVERY Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f429i-discovery.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f429i-discovery** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F429I-DISCOVERY** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f429i-discovery/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) -* [stm32-ili9341](https://github.com/STMicroelectronics/stm32-ili9341) -* [stm32-l3gd20](https://github.com/STMicroelectronics/stm32-l3gd20) -* [stm32-stmpe811](https://github.com/STMicroelectronics/stm32-stmpe811) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F429I-Discovery/Release_Notes.html b/Drivers/BSP/STM32F429I-Discovery/Release_Notes.html deleted file mode 100644 index 0502726e62..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/Release_Notes.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - Release Notes for STM32F429 Discovery Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F429 Discovery Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F429 Discovery Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
  • Update touch calibration to fix inverted touch panel on STM32F429I-DISCOVERY
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update to support the I3G4250D gyroscope component
  • -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Remove Date & Version
  • -
  • stm32f429i_discovery_lcd.c/.h -
      -
    • Update BSP_LCD_DrawBitmap() API to fix functional misbehaviour with SW4STM32 Toolchain
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Replace __PPP_CLK_ENABLE/DISABLE with __HAL_RCC_PPP_ENABLE/DISABLE
  • -
  • Set NVIC priority to 0x0F
  • -
  • stm32f429i_discovery_lcd.c/.h -
      -
    • Update BSP_LCD_ReadPixel implementation for ARGB8888 and RGB888 formats
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery_lcd.c/.h -
      -
    • Provide BSP full coverage for the LTDC reload HW capabilities (Immediate reload , Vertical Blanking Reload , No reload) -
        -
      • BSP_LCD_Relaod() to disable the color keying without reloading
      • -
      • BSP_LCD_SetLayerVisible_NoReload() to set an LCD Layer visible without reloading
      • -
      • BSP_LCD_SetTransparency_NoReload() to configure the transparency without reloading
      • -
      • BSP_LCD_SetLayerAddress_NoReload() to set an LCD layer frame buffer address without reloading
      • -
      • BSP_LCD_SetLayerWindow_NoReload() to set display window without reloading
      • -
      • BSP_LCD_SetColorKeying_NoReload() to configure and sets the color keying without reloading
      • -
      • BSP_LCD_ResetColorKeying_NoReload() to disables the color keying without reloading
      • -
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32429I_EVAL_BSP_User_Manual.chm file
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE() .
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery.c/.h -
      -
    • Change I2C_SPEED used define by BSP_I2C_SPEED
    • -
  • -
  • stm32f429i_discovery_sdram.c -
      -
    • BSP_SDRAM_Initialization_sequence(): Fix wrong configuration of the burst length
    • -
  • -
  • stm32f429i_discovery_gyroscope.h, stm32f429i_discovery_io.h,stm32f429i_discovery_lcd.c/.h and stm32f429i_discovery_ts.h: -
      -
    • Change “" byâ€/" in the include path to fix compilation issue under Linux
    • -
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery.c/.h -
      -
    • Add protection for double initialization of IO_Init within LCD_IO_Init()
    • -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
  • -
  • stm32f429i_discovery_gyroscope.c/.h -
      -
    • Update BSP_GYRO_Init() to support new L3GD20 device ID (I_AM_L3GD20_TR)
    • -
  • -
  • stm32f429i_discovery_ts.c/.h -
      -
    • Correct wrong TS configuration BSP_TS_ITConfig() and TS IT implementation, BSP_TS_ITClear() related to the use of IO expander STMPE1600 device not available on stm32f429i discovery board
    • -
    • Comments clean up and typo corrections
    • -
  • -
  • stm32f429i_discovery_eeprom.c/.h -
      -
    • Update usage of BSP_EEPROM_TIMEOUT_UserCallback() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery_eeprom.c/.h -
      -
    • Update usage of BSP_EEPROM_TIMEOUT_UserCallback() function
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Major update based on STM32Cube specification: drivers architecture and APIs modified vs. V1.0.2, and thus the 2 versions are not compatible.
  • -
  • This version has to be used only with STM32CubeF4 based development
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Update IO expander interrupt line on stm32f429i_discovery_ioe.h file.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f429i_discovery_l3gd20.c, stm32f429i_discovery_lcd.c -
      -
    • Set SPI baudrate to 5.625 MHz to fit LCD and Gyroscope timing characteristics -
        -
      • ILI9341 LCD SPI interface max baud rate is 10MHz for write and 6.66MHz for read
      • -
      • Gyroscope l3gd20 SPI interface max baud rate is 10MHz for write/read
      • -
    • -
  • -
  • stm32f429i_discovery_lcd.c -
      -
    • Improve SPI low level write routines (add check on BSY flag before to deselect the LCD)
    • -
    • Remove the __IO attribute from these function’s parameters: LCD_SetLayer(), LCD_SetColors(), LCD_GetColors(), LCD_SetTextColor() and LCD_SetBackColor()
    • -
  • -
  • stm32f429i_discovery_i2c_ee.c, stm32f429i_discovery_i2c_ ioe.c -
      -
    • Add a test in Init() function; if the I2C is already configured, then there is no need to reconfigure it again
    • -
    • I2C_SPEED define moved to stm32f429i_discovery.h file
    • -
  • -
  • stm32f429i_discovery_sdram.c -
      -
    • Update device refresh counter value to fit with SDRAM timing characteristics
    • -
  • -
  • Miscellaneous robustness improvement
  • -
  • Miscellaneous comments update
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official version of the STM32F429 Discovery Board Drivers
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F429I-Discovery/_htmresc/favicon.png b/Drivers/BSP/STM32F429I-Discovery/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F429I-Discovery/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F429I-Discovery/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F429I-Discovery/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F429I-Discovery/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F429I-Discovery/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F429I-Discovery/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.c deleted file mode 100644 index ac4f7d6350..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.c +++ /dev/null @@ -1,1108 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage Leds and - * push-button available on STM32F429I-Discovery Kit from STMicroelectronics. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY STM32F429I DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL STM32F429I DISCOVERY LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F429I-Discovery Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32F429I DISCOVERY LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Defines STM32F429I DISCOVERY LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32F429I DISCO BSP Driver version number V2.1.8 - */ -#define __STM32F429I_DISCO_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ -#define __STM32F429I_DISCO_BSP_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ -#define __STM32F429I_DISCO_BSP_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */ -#define __STM32F429I_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F429I_DISCO_BSP_VERSION ((__STM32F429I_DISCO_BSP_VERSION_MAIN << 24)\ - |(__STM32F429I_DISCO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F429I_DISCO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F429I_DISCO_BSP_VERSION_RC)) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Macros STM32F429I DISCOVERY LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Private_Variables STM32F429I DISCOVERY LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef *GPIO_PORT[LEDn] = {LED3_GPIO_PORT, - LED4_GPIO_PORT - }; - -const uint16_t GPIO_PIN[LEDn] = {LED3_PIN, - LED4_PIN - }; - -GPIO_TypeDef *BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn}; - -uint32_t I2cxTimeout = I2Cx_TIMEOUT_MAX; /*Instance == DISCOVERY_I2Cx) - { - /* Configure the GPIOs ---------------------------------------------------*/ - /* Enable GPIO clock */ - DISCOVERY_I2Cx_SDA_GPIO_CLK_ENABLE(); - DISCOVERY_I2Cx_SCL_GPIO_CLK_ENABLE(); - - /* Configure I2C Tx as alternate function */ - GPIO_InitStruct.Pin = DISCOVERY_I2Cx_SCL_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FAST; - GPIO_InitStruct.Alternate = DISCOVERY_I2Cx_SCL_SDA_AF; - HAL_GPIO_Init(DISCOVERY_I2Cx_SCL_GPIO_PORT, &GPIO_InitStruct); - - /* Configure I2C Rx as alternate function */ - GPIO_InitStruct.Pin = DISCOVERY_I2Cx_SDA_PIN; - HAL_GPIO_Init(DISCOVERY_I2Cx_SDA_GPIO_PORT, &GPIO_InitStruct); - - - /* Configure the Discovery I2Cx peripheral -------------------------------*/ - /* Enable I2C3 clock */ - DISCOVERY_I2Cx_CLOCK_ENABLE(); - - /* Force the I2C Peripheral Clock Reset */ - DISCOVERY_I2Cx_FORCE_RESET(); - - /* Release the I2C Peripheral Clock Reset */ - DISCOVERY_I2Cx_RELEASE_RESET(); - - /* Enable and set Discovery I2Cx Interrupt to the lowest priority */ - HAL_NVIC_SetPriority(DISCOVERY_I2Cx_EV_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DISCOVERY_I2Cx_EV_IRQn); - - /* Enable and set Discovery I2Cx Interrupt to the lowest priority */ - HAL_NVIC_SetPriority(DISCOVERY_I2Cx_ER_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(DISCOVERY_I2Cx_ER_IRQn); - -#ifdef EE_M24LR64 - /* I2C DMA TX and RX channels configuration */ - /* Enable the DMA clock */ - EEPROM_I2C_DMA_CLK_ENABLE(); - - /* Configure the DMA stream for the EE I2C peripheral TX direction */ - /* Configure the DMA Stream */ - hdma_tx.Instance = EEPROM_I2C_DMA_STREAM_TX; - /* Set the parameters to be configured */ - hdma_tx.Init.Channel = EEPROM_I2C_DMA_CHANNEL; - hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_tx.Init.Mode = DMA_NORMAL; - hdma_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - /* Associate the initilalized hdma_tx handle to the the pI2cHandle handle */ - __HAL_LINKDMA(pI2cHandle, hdmatx, hdma_tx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_tx); - - /* Configure and enable I2C DMA TX Channel interrupt */ - HAL_NVIC_SetPriority((IRQn_Type)(EEPROM_I2C_DMA_TX_IRQn), EEPROM_I2C_DMA_PREPRIO, 0); - HAL_NVIC_EnableIRQ((IRQn_Type)(EEPROM_I2C_DMA_TX_IRQn)); - - /* Configure the DMA stream for the EE I2C peripheral TX direction */ - /* Configure the DMA Stream */ - hdma_rx.Instance = EEPROM_I2C_DMA_STREAM_RX; - /* Set the parameters to be configured */ - hdma_rx.Init.Channel = EEPROM_I2C_DMA_CHANNEL; - hdma_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma_rx.Init.Mode = DMA_NORMAL; - hdma_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_rx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_rx.Init.PeriphBurst = DMA_PBURST_SINGLE; - - /* Associate the initilalized hdma_rx handle to the the pI2cHandle handle*/ - __HAL_LINKDMA(pI2cHandle, hdmarx, hdma_rx); - - /* Configure the DMA Stream */ - HAL_DMA_Init(&hdma_rx); - - /* Configure and enable I2C DMA RX Channel interrupt */ - HAL_NVIC_SetPriority((IRQn_Type)(EEPROM_I2C_DMA_RX_IRQn), EEPROM_I2C_DMA_PREPRIO, 0); - HAL_NVIC_EnableIRQ((IRQn_Type)(EEPROM_I2C_DMA_RX_IRQn)); -#endif /* EE_M24LR64 */ - } -} - -/** - * @brief I2Cx Bus initialization. - */ -static void I2Cx_Init(void) -{ - if (HAL_I2C_GetState(&I2cHandle) == HAL_I2C_STATE_RESET) - { - I2cHandle.Instance = DISCOVERY_I2Cx; - I2cHandle.Init.ClockSpeed = BSP_I2C_SPEED; - I2cHandle.Init.DutyCycle = I2C_DUTYCYCLE_2; - I2cHandle.Init.OwnAddress1 = 0; - I2cHandle.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; - I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED; - I2cHandle.Init.OwnAddress2 = 0; - I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED; - I2cHandle.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED; - - /* Init the I2C */ - I2Cx_MspInit(&I2cHandle); - HAL_I2C_Init(&I2cHandle); - } -} - -/** - * @brief Configures Interruption pin for I2C communication. - */ -static void I2Cx_ITConfig(void) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /* Enable the GPIO EXTI Clock */ - STMPE811_INT_CLK_ENABLE(); - - GPIO_InitStruct.Pin = STMPE811_INT_PIN; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_LOW; - GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; - HAL_GPIO_Init(STMPE811_INT_GPIO_PORT, &GPIO_InitStruct); - - /* Enable and set GPIO EXTI Interrupt to the highest priority */ - HAL_NVIC_SetPriority((IRQn_Type)(STMPE811_INT_EXTI), 0x0F, 0x00); - HAL_NVIC_EnableIRQ((IRQn_Type)(STMPE811_INT_EXTI)); -} - -/** - * @brief Writes a value in a register of the device through BUS. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param Value: The target register value to be written - */ -static void I2Cx_WriteData(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2cxTimeout); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - } -} - -/** - * @brief Writes a value in a register of the device through BUS. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param pBuffer: The target register value to be written - * @param Length: buffer size to be written - */ -static void I2Cx_WriteBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - } -} - -/** - * @brief Reads a register of the device through BUS. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @retval Data read at register address - */ -static uint8_t I2Cx_ReadData(uint8_t Addr, uint8_t Reg) -{ - HAL_StatusTypeDef status = HAL_OK; - uint8_t value = 0; - - status = HAL_I2C_Mem_Read(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, I2cxTimeout); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - - } - return value; -} - -/** - * @brief Reads multiple data on the BUS. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @param pBuffer: pointer to read data buffer - * @param Length: length of the data - * @retval 0 if no problems to read multiple data - */ -static uint8_t I2Cx_ReadBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout); - - /* Check the communication status */ - if (status == HAL_OK) - { - return 0; - } - else - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - - return 1; - } -} - -#ifdef EE_M24LR64 -/** - * @brief Writes a value in a register of the device through BUS in using DMA mode. - * @param Addr: Device address on BUS Bus. - * @param Reg: The target register address to write - * @param pBuffer: The target register value to be written - * @param Length: buffer size to be written - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_WriteBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Write_DMA(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_16BIT, pBuffer, Length); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - } - - return status; -} - -/** - * @brief Reads multiple data on the BUS in using DMA mode. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @param pBuffer: pointer to read data buffer - * @param Length: length of the data - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_ReadBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_I2C_Mem_Read_DMA(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_16BIT, pBuffer, Length); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - I2Cx_Error(); - } - - return status; -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -static HAL_StatusTypeDef I2Cx_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (HAL_I2C_IsDeviceReady(&I2cHandle, DevAddress, Trials, I2cxTimeout)); -} -#endif /* EE_M24LR64 */ - -/** - * @brief I2Cx error treatment function - */ -static void I2Cx_Error(void) -{ - /* De-initialize the SPI communication BUS */ - HAL_I2C_DeInit(&I2cHandle); - - /* Re-Initialize the SPI communication BUS */ - I2Cx_Init(); -} - -/******************************* SPI Routines *********************************/ - -/** - * @brief SPIx Bus initialization - */ -static void SPIx_Init(void) -{ - if (HAL_SPI_GetState(&SpiHandle) == HAL_SPI_STATE_RESET) - { - /* SPI configuration -----------------------------------------------------*/ - SpiHandle.Instance = DISCOVERY_SPIx; - /* SPI baudrate is set to 5.6 MHz (PCLK2/SPI_BaudRatePrescaler = 90/16 = 5.625 MHz) - to verify these constraints: - - ILI9341 LCD SPI interface max baudrate is 10MHz for write and 6.66MHz for read - - l3gd20 SPI interface max baudrate is 10MHz for write/read - - PCLK2 frequency is set to 90 MHz - */ - SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; - - /* On STM32F429I-Discovery, LCD ID cannot be read then keep a common configuration */ - /* for LCD and GYRO (SPI_DIRECTION_2LINES) */ - /* Note: To read a register a LCD, SPI_DIRECTION_1LINE should be set */ - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; - SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = SPI_NSS_SOFT; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - SpiHandle.Init.Mode = SPI_MODE_MASTER; - - SPIx_MspInit(&SpiHandle); - HAL_SPI_Init(&SpiHandle); - } -} - -/** - * @brief Reads 4 bytes from device. - * @param ReadSize: Number of bytes to read (max 4 bytes) - * @retval Value read on the SPI - */ -static uint32_t SPIx_Read(uint8_t ReadSize) -{ - HAL_StatusTypeDef status = HAL_OK; - uint32_t readvalue; - - status = HAL_SPI_Receive(&SpiHandle, (uint8_t *) &readvalue, ReadSize, SpixTimeout); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - SPIx_Error(); - } - - return readvalue; -} - -/** - * @brief Writes a byte to device. - * @param Value: value to be written - */ -static void SPIx_Write(uint16_t Value) -{ - HAL_StatusTypeDef status = HAL_OK; - - status = HAL_SPI_Transmit(&SpiHandle, (uint8_t *) &Value, 1, SpixTimeout); - - /* Check the communication status */ - if (status != HAL_OK) - { - /* Re-Initialize the BUS */ - SPIx_Error(); - } -} - -/** - * @brief Sends a Byte through the SPI interface and return the Byte received - * from the SPI bus. - * @param Byte: Byte send. - * @retval The received byte value - */ -static uint8_t SPIx_WriteRead(uint8_t Byte) -{ - uint8_t receivedbyte = 0; - - /* Send a Byte through the SPI peripheral */ - /* Read byte from the SPI bus */ - if (HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t *) &Byte, (uint8_t *) &receivedbyte, 1, SpixTimeout) != HAL_OK) - { - SPIx_Error(); - } - - return receivedbyte; -} - -/** - * @brief SPIx error treatment function. - */ -static void SPIx_Error(void) -{ - /* De-initialize the SPI communication BUS */ - HAL_SPI_DeInit(&SpiHandle); - - /* Re- Initialize the SPI communication BUS */ - SPIx_Init(); -} - -/** - * @brief SPI MSP Init. - * @param hspi: SPI handle - */ -static void SPIx_MspInit(SPI_HandleTypeDef *hspi) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable SPIx clock */ - DISCOVERY_SPIx_CLK_ENABLE(); - - /* Enable DISCOVERY_SPI GPIO clock */ - DISCOVERY_SPIx_GPIO_CLK_ENABLE(); - - /* configure SPI SCK, MOSI and MISO */ - GPIO_InitStructure.Pin = (DISCOVERY_SPIx_SCK_PIN | DISCOVERY_SPIx_MOSI_PIN | DISCOVERY_SPIx_MISO_PIN); - GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; - GPIO_InitStructure.Pull = GPIO_PULLDOWN; - GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM; - GPIO_InitStructure.Alternate = DISCOVERY_SPIx_AF; - HAL_GPIO_Init(DISCOVERY_SPIx_GPIO_PORT, &GPIO_InitStructure); -} - -/********************************* LINK LCD ***********************************/ - -/** - * @brief Configures the LCD_SPI interface. - */ -void LCD_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - if (Is_LCD_IO_Initialized == 0) - { - Is_LCD_IO_Initialized = 1; - - /* Configure NCS in Output Push-Pull mode */ - LCD_WRX_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Pin = LCD_WRX_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(LCD_WRX_GPIO_PORT, &GPIO_InitStructure); - - LCD_RDX_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Pin = LCD_RDX_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(LCD_RDX_GPIO_PORT, &GPIO_InitStructure); - - /* Configure the LCD Control pins ----------------------------------------*/ - LCD_NCS_GPIO_CLK_ENABLE(); - - /* Configure NCS in Output Push-Pull mode */ - GPIO_InitStructure.Pin = LCD_NCS_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - HAL_GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure); - - /* Set or Reset the control line */ - LCD_CS_LOW(); - LCD_CS_HIGH(); - - SPIx_Init(); - } -} - -/** - * @brief Writes register value. - */ -void LCD_IO_WriteData(uint16_t RegValue) -{ - /* Set WRX to send data */ - LCD_WRX_HIGH(); - - /* Reset LCD control line(/CS) and Send data */ - LCD_CS_LOW(); - SPIx_Write(RegValue); - - /* Deselect: Chip Select high */ - LCD_CS_HIGH(); -} - -/** - * @brief Writes register address. - */ -void LCD_IO_WriteReg(uint8_t Reg) -{ - /* Reset WRX to send command */ - LCD_WRX_LOW(); - - /* Reset LCD control line(/CS) and Send command */ - LCD_CS_LOW(); - SPIx_Write(Reg); - - /* Deselect: Chip Select high */ - LCD_CS_HIGH(); -} - -/** - * @brief Reads register value. - * @param RegValue Address of the register to read - * @param ReadSize Number of bytes to read - * @retval Content of the register value - */ -uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize) -{ - uint32_t readvalue = 0; - - /* Select: Chip Select low */ - LCD_CS_LOW(); - - /* Reset WRX to send command */ - LCD_WRX_LOW(); - - SPIx_Write(RegValue); - - readvalue = SPIx_Read(ReadSize); - - /* Set WRX to send data */ - LCD_WRX_HIGH(); - - /* Deselect: Chip Select high */ - LCD_CS_HIGH(); - - return readvalue; -} - -/** - * @brief Wait for loop in ms. - * @param Delay in ms. - */ -void LCD_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/******************************************************************************* - LINK OPERATIONS - *******************************************************************************/ - -/********************************* LINK IOE ***********************************/ - -/** - * @brief IOE Low Level Initialization. - */ -void IOE_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief IOE Low Level Interrupt configuration. - */ -void IOE_ITConfig(void) -{ - I2Cx_ITConfig(); -} - -/** - * @brief IOE Writes single data operation. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @param Value: Data to be written - */ -void IOE_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) -{ - I2Cx_WriteData(Addr, Reg, Value); -} - -/** - * @brief IOE Reads single data. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @retval The read data - */ -uint8_t IOE_Read(uint8_t Addr, uint8_t Reg) -{ - return I2Cx_ReadData(Addr, Reg); -} - -/** - * @brief IOE Writes multiple data. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @param pBuffer: pointer to data buffer - * @param Length: length of the data - */ -void IOE_WriteMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - I2Cx_WriteBuffer(Addr, Reg, pBuffer, Length); -} - -/** - * @brief IOE Reads multiple data. - * @param Addr: I2C Address - * @param Reg: Reg Address - * @param pBuffer: pointer to data buffer - * @param Length: length of the data - * @retval 0 if no problems to read multiple data - */ -uint16_t IOE_ReadMultiple(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) -{ - return I2Cx_ReadBuffer(Addr, Reg, pBuffer, Length); -} - -/** - * @brief IOE Delay. - * @param Delay in ms - */ -void IOE_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} - -/********************************* LINK GYROSCOPE *****************************/ - -/** - * @brief Configures the Gyroscope SPI interface. - */ -void GYRO_IO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Configure the Gyroscope Control pins ------------------------------------*/ - /* Enable CS GPIO clock and Configure GPIO PIN for Gyroscope Chip select */ - GYRO_CS_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Pin = GYRO_CS_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM; - HAL_GPIO_Init(GYRO_CS_GPIO_PORT, &GPIO_InitStructure); - - /* Deselect: Chip Select high */ - GYRO_CS_HIGH(); - - /* Enable INT1, INT2 GPIO clock and Configure GPIO PINs to detect Interrupts */ - GYRO_INT_GPIO_CLK_ENABLE(); - GPIO_InitStructure.Pin = GYRO_INT1_PIN | GYRO_INT2_PIN; - GPIO_InitStructure.Mode = GPIO_MODE_INPUT; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - GPIO_InitStructure.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GYRO_INT_GPIO_PORT, &GPIO_InitStructure); - - SPIx_Init(); -} - -/** - * @brief Writes one byte to the Gyroscope. - * @param pBuffer: Pointer to the buffer containing the data to be written to the Gyroscope. - * @param WriteAddr: Gyroscope's internal address to write to. - * @param NumByteToWrite: Number of bytes to write. - */ -void GYRO_IO_Write(uint8_t *pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite) -{ - /* Configure the MS bit: - - When 0, the address will remain unchanged in multiple read/write commands. - - When 1, the address will be auto incremented in multiple read/write commands. - */ - if (NumByteToWrite > 0x01) - { - WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD; - } - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(WriteAddr); - - /* Send the data that will be written into the device (MSB First) */ - while (NumByteToWrite >= 0x01) - { - SPIx_WriteRead(*pBuffer); - NumByteToWrite--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - -/** - * @brief Reads a block of data from the Gyroscope. - * @param pBuffer: Pointer to the buffer that receives the data read from the Gyroscope. - * @param ReadAddr: Gyroscope's internal address to read from. - * @param NumByteToRead: Number of bytes to read from the Gyroscope. - */ -void GYRO_IO_Read(uint8_t *pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) -{ - if (NumByteToRead > 0x01) - { - ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD); - } - else - { - ReadAddr |= (uint8_t)READWRITE_CMD; - } - /* Set chip select Low at the start of the transmission */ - GYRO_CS_LOW(); - - /* Send the Address of the indexed register */ - SPIx_WriteRead(ReadAddr); - - /* Receive the data that will be read from the device (MSB First) */ - while (NumByteToRead > 0x00) - { - /* Send dummy byte (0x00) to generate the SPI clock to Gyroscope (Slave device) */ - *pBuffer = SPIx_WriteRead(DUMMY_BYTE); - NumByteToRead--; - pBuffer++; - } - - /* Set chip select High at the end of the transmission */ - GYRO_CS_HIGH(); -} - - -#ifdef EE_M24LR64 - -/******************************** LINK I2C EEPROM *****************************/ - -/** - * @brief Initializes peripherals used by the I2C EEPROM driver. - */ -void EEPROM_IO_Init(void) -{ - I2Cx_Init(); -} - -/** - * @brief Writes data to I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be sent - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize) -{ - return (I2Cx_WriteBufferDMA(DevAddress, MemAddress, pBuffer, BufferSize)); -} - -/** - * @brief Reads data from I2C EEPROM driver in using DMA channel. - * @param DevAddress: Target device address - * @param MemAddress: Internal memory address - * @param pBuffer: Pointer to data buffer - * @param BufferSize: Amount of data to be read - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize) -{ - return (I2Cx_ReadBufferDMA(DevAddress, MemAddress, pBuffer, BufferSize)); -} - -/** - * @brief Checks if target device is ready for communication. - * @note This function is used with Memory devices - * @param DevAddress: Target device address - * @param Trials: Number of trials - * @retval HAL status - */ -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials) -{ - return (I2Cx_IsDeviceReady(DevAddress, Trials)); -} -#endif /* EE_M24LR64 */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.h deleted file mode 100644 index 1eac1919ac..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery.h +++ /dev/null @@ -1,333 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery.h - * @author MCD Application Team - * @brief This file contains definitions for STM32F429I-Discovery Kit LEDs, - * push-buttons hardware resources. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* IMPORTANT: One of the following flags must be defined in the preprocessor */ -/* options in order to select the target board revision: !!!!!!!!!! */ -/* USE_STM32F429I_DISCO */ /* Applicable for all boards except STM32F429I DISCOVERY REVD and above */ -/* USE_STM32F429I_DISCOVERY_REVD */ /* Applicable only for STM32F429I DISCOVERY REVD and above */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_H -#define __STM32F429I_DISCOVERY_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_LOW_LEVEL - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_LOW_LEVEL_Exported_Types STM32F429I DISCOVERY LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED3 = 0, - LED4 = 1 -} Led_TypeDef; - -typedef enum -{ - BUTTON_KEY = 0, -} Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -} ButtonMode_TypeDef; - -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_Exported_Constants STM32F429I DISCOVERY LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F429I_DISCO board - */ -#if !defined(USE_STM32F429I_DISCOVERY_REVD) && \ - !defined(USE_STM32F429I_DISCO) -#define USE_STM32F429I_DISCO -#endif - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_LED STM32F429I DISCOVERY LOW LEVEL LED - * @{ - */ -#define LEDn 2 - -#define LED3_PIN GPIO_PIN_13 -#define LED3_GPIO_PORT GPIOG -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LED4_PIN GPIO_PIN_14 -#define LED4_GPIO_PORT GPIOG -#define LED4_GPIO_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() -#define LED4_GPIO_CLK_DISABLE() __HAL_RCC_GPIOG_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) LED3_GPIO_CLK_ENABLE(); else \ - if((__INDEX__) == 1) LED4_GPIO_CLK_ENABLE(); \ - }while(0) -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) LED3_GPIO_CLK_DISABLE(); else \ - if((__INDEX__) == 1) LED4_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_BUTTON STM32F429I DISCOVERY LOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Wakeup push-button - */ -#define KEY_BUTTON_PIN GPIO_PIN_0 -#define KEY_BUTTON_GPIO_PORT GPIOA -#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define KEY_BUTTON_EXTI_IRQn EXTI0_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_ENABLE(); \ - }while(0) -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) do{if((__INDEX__) == 0) KEY_BUTTON_GPIO_CLK_DISABLE(); \ - }while(0) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LOW_LEVEL_BUS STM32F429I DISCOVERY LOW LEVEL BUS - * @{ - */ -/* Exported constanIO --------------------------------------------------------*/ -#define IO_I2C_ADDRESS 0x82 -#define TS_I2C_ADDRESS 0x82 - -#ifdef EE_M24LR64 -#define EEPROM_I2C_ADDRESS_A01 0xA0 -#define EEPROM_I2C_ADDRESS_A02 0xA6 -#endif /* EE_M24LR64 */ - -/*############################### I2Cx #######################################*/ -/* User can use this section to tailor I2Cx instance used and associated - resources */ -#define DISCOVERY_I2Cx I2C3 -#define DISCOVERY_I2Cx_CLOCK_ENABLE() __HAL_RCC_I2C3_CLK_ENABLE() -#define DISCOVERY_I2Cx_FORCE_RESET() __HAL_RCC_I2C3_FORCE_RESET() -#define DISCOVERY_I2Cx_RELEASE_RESET() __HAL_RCC_I2C3_RELEASE_RESET() -#define DISCOVERY_I2Cx_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define DISCOVERY_I2Cx_SCL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define DISCOVERY_I2Cx_SDA_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() - -/* Definition for DISCO I2Cx Pins */ -#define DISCOVERY_I2Cx_SCL_PIN GPIO_PIN_8 -#define DISCOVERY_I2Cx_SCL_GPIO_PORT GPIOA -#define DISCOVERY_I2Cx_SCL_SDA_AF GPIO_AF4_I2C3 -#define DISCOVERY_I2Cx_SDA_PIN GPIO_PIN_9 -#define DISCOVERY_I2Cx_SDA_GPIO_PORT GPIOC - -/* Definition for IOE I2Cx's NVIC */ -#define DISCOVERY_I2Cx_EV_IRQn I2C3_EV_IRQn -#define DISCOVERY_I2Cx_ER_IRQn I2C3_ER_IRQn - -/* I2C clock speed configuration (in Hz) - WARNING: - Make sure that this define is not already declared in other files. - It can be used in parallel by other modules. */ -#ifndef BSP_I2C_SPEED -#define BSP_I2C_SPEED 100000 -#endif /* BSP_I2C_SPEED */ - -#define I2Cx_TIMEOUT_MAX 0x3000 /* 0) - { - if (HAL_GetTick() > EEPROMTimeout) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Writes more than one byte to the EEPROM with a single WRITE cycle. - * - * @note The number of bytes (combined to write start address) must not - * cross the EEPROM page boundary. This function can only write into - * the boundaries of an EEPROM page. - * This function doesn't check on boundaries condition (in this driver - * the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is - * responsible of checking on Page boundaries). - * - * @param pBuffer : pointer to the buffer containing the data to be written to - * the EEPROM. - * @param WriteAddr : EEPROM's internal address to write to. - * @param NumByteToWrite : pointer to the variable holding number of bytes to - * be written into the EEPROM. - * - * @note The variable pointed by NumByteToWrite is reset to 0 when all the - * data are written to the EEPROM. Application should monitor this - * variable in order know when the transfer is complete. - * - * @note This function just configure the communication and enable the DMA - * channel to transfer data. Meanwhile, the user application may perform - * other tasks in parallel. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WritePage(uint8_t *pBuffer, uint16_t WriteAddr, uint8_t *NumByteToWrite) -{ - uint32_t buffersize = *NumByteToWrite; - uint32_t status = EEPROM_OK; - /* Set the pointer to the Number of data to be written. This pointer will be used - by the DMA Transfer Completer interrupt Handler in order to reset the - variable to 0. User should check on this variable in order to know if the - DMA transfer has been complete or not. */ - EEPROMDataWrite = *NumByteToWrite; - - if (EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK) - { - status = EEPROM_FAIL; - } - - /* Wait transfer through DMA to be complete */ - EEPROMTimeout = HAL_GetTick() + EEPROM_WRITE_TIMEOUT; - while (EEPROMDataWrite > 0) - { - if (HAL_GetTick() > EEPROMTimeout) - { - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - } - - if (BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) - { - return EEPROM_FAIL; - } - - /* If all operations OK, return EEPROM_OK (0) */ - return status; -} - -/** - * @brief Writes buffer of data to the I2C EEPROM. - * @param pBuffer : pointer to the buffer containing the data to be written - * to the EEPROM. - * @param WriteAddr : EEPROM's internal address to write to. - * @param NumByteToWrite : number of bytes to write to the EEPROM. - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite) -{ - uint16_t numofpage = 0, numofsingle = 0, count = 0; - uint16_t addr = 0; - uint8_t dataindex = 0; - uint32_t status = EEPROM_OK; - - addr = WriteAddr % EEPROM_PAGESIZE; - count = EEPROM_PAGESIZE - addr; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - /* If WriteAddr is EEPROM_PAGESIZE aligned */ - if (addr == 0) - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if (numofpage == 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - /* Start writing data */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - while (numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - - if (numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - } - } - } - /* If WriteAddr is not EEPROM_PAGESIZE aligned */ - else - { - /* If NumByteToWrite < EEPROM_PAGESIZE */ - if (numofpage == 0) - { - /* If the number of data to be written is more than the remaining space - in the current page: */ - if (NumByteToWrite > count) - { - /* Store the number of data to be written */ - dataindex = count; - /* Write the data contained in same page */ - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - - /* Store the number of data to be written */ - dataindex = (NumByteToWrite - count); - /* Write the remaining data in the following page */ - status = BSP_EEPROM_WritePage((uint8_t *)(pBuffer + count), (WriteAddr + count), (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - } - else - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - } - } - /* If NumByteToWrite > EEPROM_PAGESIZE */ - else - { - NumByteToWrite -= count; - numofpage = NumByteToWrite / EEPROM_PAGESIZE; - numofsingle = NumByteToWrite % EEPROM_PAGESIZE; - - if (count != 0) - { - /* Store the number of data to be written */ - dataindex = count; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - WriteAddr += count; - pBuffer += count; - } - - while (numofpage--) - { - /* Store the number of data to be written */ - dataindex = EEPROM_PAGESIZE; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - WriteAddr += EEPROM_PAGESIZE; - pBuffer += EEPROM_PAGESIZE; - } - if (numofsingle != 0) - { - /* Store the number of data to be written */ - dataindex = numofsingle; - status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t *)(&dataindex)); - if (status != EEPROM_OK) - { - return status; - } - } - } - } - - /* If all operations OK, return EEPROM_OK (0) */ - return EEPROM_OK; -} - -/** - * @brief Wait for EEPROM Standby state. - * - * @note This function allows to wait and check that EEPROM has finished the - * last operation. It is mostly used after Write operation: after receiving - * the buffer to be written, the EEPROM may need additional time to actually - * perform the write operation. During this time, it doesn't answer to - * I2C packets addressed to it. Once the write operation is complete - * the EEPROM responds to its address. - * - * @retval EEPROM_OK (0) if operation is correctly performed, else return value - * different from EEPROM_OK (0) or the timeout user callback. - */ -uint32_t BSP_EEPROM_WaitEepromStandbyState(void) -{ - /* Check if the maximum allowed number of trials has bee reached */ - if (EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) - { - /* If the maximum number of trials has been reached, exit the function */ - BSP_EEPROM_TIMEOUT_UserCallback(); - return EEPROM_TIMEOUT; - } - return EEPROM_OK; -} - -/** - * @brief Memory Tx Transfer completed callbacks. - * @param hi2c: I2C handle - */ -void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) -{ - EEPROMDataWrite = 0; -} - -/** - * @brief Memory Rx Transfer completed callbacks. - * @param hi2c: I2C handle - */ -void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) -{ - EEPROMDataRead = 0; -} - -/** - * @brief Basic management of the timeout situation. - */ -__weak void BSP_EEPROM_TIMEOUT_UserCallback(void) -{ -} - -#endif /* EE_M24LR64 */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_eeprom.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_eeprom.h deleted file mode 100644 index 8aeb4a7a5c..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_eeprom.h +++ /dev/null @@ -1,124 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_eeprom.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for - * the stm32f429i_discovery_eeprom.c firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_EEPROM_H -#define __STM32F429I_DISCOVERY_EEPROM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_EEPROM STM32F429I DISCOVERY EEPROM - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_EEPROM_Exported_Types STM32F429I DISCOVERY EEPROM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_EEPROM_Exported_Constants STM32F429I DISCOVERY EEPROM Exported Constants - * @{ - */ -/* EEPROM hardware address and page size */ -#define EEPROM_PAGESIZE 4 -#define EEPROM_MAX_SIZE 0x2000 /* 64Kbit*/ - -/* Maximum Timeout values for flags and events waiting loops. -This timeout is based on systick set to 1ms*/ -/* Timeout for read based if read all the EEPROM : EEPROM_MAX_SIZE * BSP_I2C_SPEED (640ms)*/ -#define EEPROM_READ_TIMEOUT ((uint32_t)(1000)) -/* Timeout for write based on max write which is EEPROM_PAGESIZE bytes: EEPROM_PAGESIZE * BSP_I2C_SPEED (320us)*/ -#define EEPROM_WRITE_TIMEOUT ((uint32_t)(1)) - -/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */ -#define EEPROM_MAX_TRIALS 300 - -#define EEPROM_OK 0 -#define EEPROM_FAIL 1 -#define EEPROM_TIMEOUT 2 -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_EEPROM_Exported_Macros STM32F429I DISCOVERY EEPROM Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_EEPROM_Exported_Functions STM32F429I DISCOVERY EEPROM Exported Functions - * @{ - */ -uint32_t BSP_EEPROM_Init(void); -uint32_t BSP_EEPROM_ReadBuffer(uint8_t *pBuffer, uint16_t ReadAddr, uint16_t *NumByteToRead); -uint32_t BSP_EEPROM_WritePage(uint8_t *pBuffer, uint16_t WriteAddr, uint8_t *NumByteToWrite); -uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite); -uint32_t BSP_EEPROM_WaitEepromStandbyState(void); - -/* USER Callbacks: This function is declared as __weak in EEPROM driver and - should be implemented into user application. - BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition - occurs during communication (waiting on an event that doesn't occur, bus - errors, busy devices ...). */ -void BSP_EEPROM_TIMEOUT_UserCallback(void); - - -/* Link function for I2C EEPROM peripheral */ -void EEPROM_IO_Init(void); -HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize); -HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials); - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_EEPROM_H */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.c deleted file mode 100644 index 4a9209a6ce..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.c +++ /dev/null @@ -1,273 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_gyroscope.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the - * MEMS gyroscope available on STM32F429I-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery_gyroscope.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE STM32F429I DISCOVERY GYROSCOPE - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_TypesDefinitions STM32F429I DISCOVERY GYROSCOPE Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_Defines STM32F429I DISCOVERY GYROSCOPE Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_Macros STM32F429I DISCOVERY GYROSCOPE Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_Variables STM32F429I DISCOVERY GYROSCOPE Private Variables - * @{ - */ -static GYRO_DrvTypeDef *GyroscopeDrv; - -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_FunctionPrototypes STM32F429I DISCOVERY GYROSCOPE Private FunctionPrototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Private_Functions STM32F429I DISCOVERY GYROSCOPE Private Functions - * @{ - */ - -/** - * @brief Set gyroscope Initialization. - * @retval GYRO_OK if no problem during initialization - */ -uint8_t BSP_GYRO_Init(void) -{ - uint8_t ret = GYRO_ERROR; - uint16_t ctrl = 0x0000; - GYRO_InitTypeDef Gyro_InitStructure; - GYRO_FilterConfigTypeDef Gyro_FilterStructure = {0, 0}; - - if ((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR)) - { - /* Initialize the gyroscope driver structure */ - GyroscopeDrv = &L3gd20Drv; - - /* MEMS configuration ----------------------------------------------------*/ - /* Fill the gyroscope structure */ - Gyro_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE; - Gyro_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARATE_1; - Gyro_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE; - Gyro_InitStructure.Band_Width = L3GD20_BANDWIDTH_4; - Gyro_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous; - Gyro_InitStructure.Endianness = L3GD20_BLE_LSB; - Gyro_InitStructure.Full_Scale = L3GD20_FULLSCALE_500; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl = (uint16_t)(Gyro_InitStructure.Power_Mode | Gyro_InitStructure.Output_DataRate | \ - Gyro_InitStructure.Axes_Enable | Gyro_InitStructure.Band_Width); - - ctrl |= (uint16_t)((Gyro_InitStructure.BlockData_Update | Gyro_InitStructure.Endianness | \ - Gyro_InitStructure.Full_Scale) << 8); - - /* Initialize the gyroscope */ - GyroscopeDrv->Init(ctrl); - - Gyro_FilterStructure.HighPassFilter_Mode_Selection = L3GD20_HPM_NORMAL_MODE_RES; - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0; - - ctrl = (uint8_t)((Gyro_FilterStructure.HighPassFilter_Mode_Selection | \ - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency)); - - /* Configure the gyroscope main parameters */ - GyroscopeDrv->FilterConfig(ctrl) ; - - GyroscopeDrv->FilterCmd(L3GD20_HIGHPASSFILTER_ENABLE); - - ret = GYRO_OK; - } -#if defined(USE_STM32F429I_DISCOVERY_REVD) - else if (I3g4250Drv.ReadID() == I_AM_I3G4250D) - { - /* Initialize the gyroscope driver structure */ - GyroscopeDrv = &I3g4250Drv; - - /* Configure Mems : data rate, power mode, full scale and axes */ - Gyro_InitStructure.Power_Mode = I3G4250D_MODE_ACTIVE; - Gyro_InitStructure.Output_DataRate = I3G4250D_OUTPUT_DATARATE_1; - Gyro_InitStructure.Axes_Enable = I3G4250D_AXES_ENABLE; - Gyro_InitStructure.Band_Width = I3G4250D_BANDWIDTH_4; - Gyro_InitStructure.BlockData_Update = I3G4250D_BlockDataUpdate_Continous; - Gyro_InitStructure.Endianness = I3G4250D_BLE_LSB; - Gyro_InitStructure.Full_Scale = I3G4250D_FULLSCALE_500; - - /* Configure MEMS: data rate, power mode, full scale and axes */ - ctrl = (uint16_t)(Gyro_InitStructure.Power_Mode | Gyro_InitStructure.Output_DataRate | \ - Gyro_InitStructure.Axes_Enable | Gyro_InitStructure.Band_Width); - - ctrl |= (uint16_t)((Gyro_InitStructure.BlockData_Update | Gyro_InitStructure.Endianness | \ - Gyro_InitStructure.Full_Scale) << 8); - - /* Initialize the gyroscope */ - GyroscopeDrv->Init(ctrl); - - Gyro_FilterStructure.HighPassFilter_Mode_Selection = I3G4250D_HPM_NORMAL_MODE_RES; - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency = I3G4250D_HPFCF_0; - - ctrl = (uint8_t)((Gyro_FilterStructure.HighPassFilter_Mode_Selection | \ - Gyro_FilterStructure.HighPassFilter_CutOff_Frequency)); - - /* Configure the gyroscope main parameters */ - GyroscopeDrv->FilterConfig(ctrl); - - GyroscopeDrv->FilterCmd(I3G4250D_HIGHPASSFILTER_ENABLE); - - ret = GYRO_OK; - } -#endif /* USE_STM32F429I_DISCOVERY_REVD */ - return ret; -} - -/** - * @brief Read ID of gyroscope component. - * @retval ID - */ -uint8_t BSP_GYRO_ReadID(void) -{ - uint8_t id = 0x00; - - if (GyroscopeDrv->ReadID != NULL) - { - id = GyroscopeDrv->ReadID(); - } - return id; -} - -/** - * @brief Reboot memory content of Gyroscope. - */ -void BSP_GYRO_Reset(void) -{ - if (GyroscopeDrv->Reset != NULL) - { - GyroscopeDrv->Reset(); - } -} - -/** - * @brief Configures INT1 interrupt. - * @param pIntConfig: pointer to a L3GD20_InterruptConfig_TypeDef - * structure that contains the configuration setting for the L3GD20 Interrupt. - */ -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfig) -{ - uint16_t interruptconfig = 0x0000; - - if (GyroscopeDrv->ConfigIT != NULL) - { - /* Configure latch Interrupt request and axe interrupts */ - interruptconfig |= ((uint8_t)(pIntConfig->Latch_Request | \ - pIntConfig->Interrupt_Axes) << 8); - - interruptconfig |= (uint8_t)(pIntConfig->Interrupt_ActiveEdge); - - GyroscopeDrv->ConfigIT(interruptconfig); - } -} - -/** - * @brief Enables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - */ -void BSP_GYRO_EnableIT(uint8_t IntPin) -{ - if (GyroscopeDrv->EnableIT != NULL) - { - GyroscopeDrv->EnableIT(IntPin); - } -} - -/** - * @brief Disables INT1 or INT2 interrupt. - * @param IntPin: Interrupt pin - * This parameter can be: - * @arg L3GD20_INT1 - * @arg L3GD20_INT2 - * @arg I3G4250D_INT1 - * @arg I3G4250D_INT2 - */ -void BSP_GYRO_DisableIT(uint8_t IntPin) -{ - if (GyroscopeDrv->DisableIT != NULL) - { - GyroscopeDrv->DisableIT(IntPin); - } -} - -/** - * @brief Get XYZ angular acceleration. - * @param pfData: pointer on floating array - */ -void BSP_GYRO_GetXYZ(float *pfData) -{ - if (GyroscopeDrv->GetXYZ != NULL) - { - GyroscopeDrv->GetXYZ(pfData); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.h deleted file mode 100644 index 05e481633e..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_gyroscope.h +++ /dev/null @@ -1,106 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_gyroscope.h - * @author MCD Application Team - * @brief This file contains definitions for stm32f429i_discovery_gyroscope.c - * firmware driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_GYROSCOPE_H -#define __STM32F429I_DISCOVERY_GYROSCOPE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" -/* Include Gyroscope component driver */ -#include "../Components/l3gd20/l3gd20.h" -#if defined(USE_STM32F429I_DISCOVERY_REVD) -#include "../Components/i3g4250d/i3g4250d.h" -#endif /* USE_STM32F429I_DISCOVERY_REVD */ -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_GYROSCOPE - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Exported_Types STM32F429I DISCOVERY GYROSCOPE Exported Types - * @{ - */ -typedef enum -{ - GYRO_OK = 0, - GYRO_ERROR = 1, - GYRO_TIMEOUT = 2 -} GYRO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Exported_Constants STM32F429I DISCOVERY GYROSCOPE Exported Constants - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Exported_Macros STM32F429I DISCOVERY GYROSCOPE Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_GYROSCOPE_Exported_Functions STM32F429I DISCOVERY GYROSCOPE Exported Functions - * @{ - */ -/* Gyroscope Functions */ -uint8_t BSP_GYRO_Init(void); -void BSP_GYRO_Reset(void); -uint8_t BSP_GYRO_ReadID(void); -void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfigStruct); -void BSP_GYRO_EnableIT(uint8_t IntPin); -void BSP_GYRO_DisableIT(uint8_t IntPin); -void BSP_GYRO_GetXYZ(float *pfData); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_GYROSCOPE_H */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.c deleted file mode 100644 index 9ed9a2eb20..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.c +++ /dev/null @@ -1,204 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_io.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage the STMPE811 - * IO Expander device mounted on STM32F429I-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_IO STM32F429I DISCOVERY IO - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Types_Definitions STM32F429I DISCOVERY IO Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Defines STM32F429I DISCOVERY IO Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Macros STM32F429I DISCOVERY IO Private Macros - * @{ - */ -/** - * @} - */ - - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Variables STM32F429I DISCOVERY IO Private Variables - * @{ - */ -static IO_DrvTypeDef *IoDrv; - -/** - * @} - */ - - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Function_Prototypes STM32F429I DISCOVERY IO Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Private_Functions STM32F429I DISCOVERY IO Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the IO functionalities and configures all - * necessary hardware resources (GPIOs, clocks..). - * @note BSP_IO_Init() is using HAL_Delay() function to ensure that stmpe811 - * IO Expander is correctly reset. HAL_Delay() function provides accurate - * delay (in milliseconds) based on variable incremented in SysTick ISR. - * This implies that if BSP_IO_Init() is called from a peripheral ISR process, - * then the SysTick interrupt must have higher priority (numerically lower) - * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. - * @retval IO_OK if all initializations done correctly. Other value if error. - */ -uint8_t BSP_IO_Init(void) -{ - uint8_t ret = IO_ERROR; - - /* Read ID and verify the IO expander is ready */ - if (stmpe811_io_drv.ReadID(IO_I2C_ADDRESS) == STMPE811_ID) - { - /* Initialize the IO driver structure */ - IoDrv = &stmpe811_io_drv; - ret = IO_OK; - } - - if (ret == IO_OK) - { - IoDrv->Init(IO_I2C_ADDRESS); - IoDrv->Start(IO_I2C_ADDRESS, IO_PIN_ALL); - } - return ret; -} - -/** - * @brief Gets the selected pins IT status. - * @param IoPin: The selected pins to check the status. - * This parameter could be any combination of the IO pins. - * @retval Status of IO Pin checked. - */ -uint8_t BSP_IO_ITGetStatus(uint16_t IoPin) -{ - /* Return the IO Pin IT status */ - return (IoDrv->ITStatus(IO_I2C_ADDRESS, IoPin)); -} - -/** - * @brief Clears all the IO IT pending bits - */ -void BSP_IO_ITClear(void) -{ - /* Clear all IO IT pending bits */ - IoDrv->ClearIT(IO_I2C_ADDRESS, IO_PIN_ALL); -} - -/** - * @brief Configures the IO pin(s) according to IO mode structure value. - * @param IoPin: IO pin(s) to be configured. - * This parameter could be any combination of the following values: - * @arg STMPE811_PIN_x: where x can be from 0 to 7. - * @param IoMode: The IO pin mode to configure, could be one of the following values: - * @arg IO_MODE_INPUT - * @arg IO_MODE_OUTPUT - * @arg IO_MODE_IT_RISING_EDGE - * @arg IO_MODE_IT_FALLING_EDGE - * @arg IO_MODE_IT_LOW_LEVEL - * @arg IO_MODE_IT_HIGH_LEVEL - */ -void BSP_IO_ConfigPin(uint16_t IoPin, IO_ModeTypedef IoMode) -{ - /* Configure the selected IO pin(s) mode */ - IoDrv->Config(IO_I2C_ADDRESS, IoPin, IoMode); -} - -/** - * @brief Sets the selected pins state. - * @param IoPin: The selected pins to write. - * This parameter could be any combination of the IO pins. - * @param PinState: the new pins state to write - */ -void BSP_IO_WritePin(uint16_t IoPin, uint8_t PinState) -{ - /* Set the Pin state */ - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, PinState); -} - -/** - * @brief Gets the selected pins current state. - * @param IoPin: The selected pins to read. - * This parameter could be any combination of the IO pins. - * @retval The current pins state - */ -uint16_t BSP_IO_ReadPin(uint16_t IoPin) -{ - return (IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin)); -} - -/** - * @brief Toggles the selected pins state. - * @param IoPin: The selected pins to toggle. - * This parameter could be any combination of the IO pins. - */ -void BSP_IO_TogglePin(uint16_t IoPin) -{ - /* Toggle the current pin state */ - if (IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin) == 1 /* Set */) - { - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 0 /* Reset */); - } - else - { - IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 1 /* Set */); - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.h deleted file mode 100644 index d43cf8aaeb..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_io.h +++ /dev/null @@ -1,112 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_io.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f429i_discovery_io.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_IO_H -#define __STM32F429I_DISCOVERY_IO_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" -/* Include IO component driver */ -#include "../Components/stmpe811/stmpe811.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_IO - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Exported_Types STM32F429I DISCOVERY IO Exported Types - * @{ - */ -typedef enum -{ - IO_OK = 0, - IO_ERROR = 1, - IO_TIMEOUT = 2 -} IO_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Exported_Constants STM32F429I DISCOVERY IO Exported Constants - * @{ - */ -#define IO_PIN_0 0x01 -#define IO_PIN_1 0x02 -#define IO_PIN_2 0x04 -#define IO_PIN_3 0x08 -#define IO_PIN_4 0x10 -#define IO_PIN_5 0x20 -#define IO_PIN_6 0x40 -#define IO_PIN_7 0x80 -#define IO_PIN_ALL 0xFF -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Exported_Macros STM32F429I DISCOVERY IO Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_IO_Exported_Functions STM32F429I DISCOVERY IO Exported Functions - * @{ - */ -uint8_t BSP_IO_Init(void); -uint8_t BSP_IO_ITGetStatus(uint16_t IoPin); -void BSP_IO_ITClear(void); -void BSP_IO_ConfigPin(uint16_t IoPin, IO_ModeTypedef IoMode); -void BSP_IO_WritePin(uint16_t IoPin, uint8_t PinState); -uint16_t BSP_IO_ReadPin(uint16_t IoPin); -void BSP_IO_TogglePin(uint16_t IoPin); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_IO_H */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.c deleted file mode 100644 index efc2210896..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.c +++ /dev/null @@ -1,1440 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_lcd.c - * @author MCD Application Team - * @brief This file includes the LCD driver for ILI9341 Liquid Crystal - * Display Modules of STM32F429I-Discovery kit (MB1075). - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* File Info : ----------------------------------------------------------------- - User NOTES -1. How To use this driver: --------------------------- - - This driver is used to drive directly an LCD TFT using LTDC controller. - - This driver select dynamically the mounted LCD, ILI9341 240x320 LCD mounted - on MB1075B discovery board, and use the adequate timing and setting for - the specified LCD using device ID of the ILI9341 mounted on MB1075B discovery board - -2. Driver description: ---------------------- - + Initialization steps : - o Initialize the LCD using the LCD_Init() function. - o Apply the Layer configuration using LCD_LayerDefaultInit() function - o Select the LCD layer to be used using LCD_SelectLayer() function. - o Enable the LCD display using LCD_DisplayOn() function. - - + Options - o Configure and enable the color keying functionality using LCD_SetColorKeying() - function. - o Modify in the fly the transparency and/or the frame buffer address - using the following functions : - - LCD_SetTransparency() - - LCD_SetLayerAddress() - - + Display on LCD - o Clear the hole LCD using LCD_Clear() function or only one specified string - line using LCD_ClearStringLine() function. - o Display a character on the specified line and column using LCD_DisplayChar() - function or a complete string line using LCD_DisplayStringAtLine() function. - o Display a string line on the specified position (x,y in pixel) and align mode - using LCD_DisplayStringAtLine() function. - o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) - on LCD using the available set of functions - -------------------------------------------------------------------------------*/ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery_lcd.h" -#include "../../../Utilities/Fonts/fonts.h" -#include "../../../Utilities/Fonts/font24.c" -#include "../../../Utilities/Fonts/font20.c" -#include "../../../Utilities/Fonts/font16.c" -#include "../../../Utilities/Fonts/font12.c" -#include "../../../Utilities/Fonts/font8.c" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD STM32F429I DISCOVERY LCD - * @brief This file includes the LCD driver for (ILI9341) - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_TypesDefinitions STM32F429I DISCOVERY LCD Private TypesDefinitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_Defines STM32F429I DISCOVERY LCD Private Defines - * @{ - */ -#define POLY_X(Z) ((int32_t)((Points + Z)->X)) -#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_Macros STM32F429I DISCOVERY LCD Private Macros - * @{ - */ -#define ABS(X) ((X) > 0 ? (X) : -(X)) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_Variables STM32F429I DISCOVERY LCD Private Variables - * @{ - */ -LTDC_HandleTypeDef LtdcHandler; -static DMA2D_HandleTypeDef Dma2dHandler; -static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; - -/* Default LCD configuration with LCD Layer 1 */ -static uint32_t ActiveLayer = 0; -static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER]; -LCD_DrvTypeDef *LcdDrv; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_FunctionPrototypes STM32F429I DISCOVERY LCD Private FunctionPrototypes - * @{ - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c); -static void FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, - uint32_t ColorIndex); -static void ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode); -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Private_Functions STM32F429I DISCOVERY LCD Private Functions - * @{ - */ - -/** - * @brief Initializes the LCD. - * @retval LCD state - */ -uint8_t BSP_LCD_Init(void) -{ - /* On STM32F429I-DISCO, it is not possible to read ILI9341 ID because */ - /* PIN EXTC is not connected to VDD and then LCD_READ_ID4 is not accessible. */ - /* In this case, ReadID function is bypassed.*/ - /*if(ili9341_drv.ReadID() == ILI9341_ID)*/ - - /* LTDC Configuration ----------------------------------------------------*/ - LtdcHandler.Instance = LTDC; - - /* Timing configuration (Typical configuration from ILI9341 datasheet) - HSYNC=10 (9+1) - HBP=20 (29-10+1) - ActiveW=240 (269-20-10+1) - HFP=10 (279-240-20-10+1) - - VSYNC=2 (1+1) - VBP=2 (3-2+1) - ActiveH=320 (323-2-2+1) - VFP=4 (327-320-2-2+1) - */ - - /* Configure horizontal synchronization width */ - LtdcHandler.Init.HorizontalSync = ILI9341_HSYNC; - /* Configure vertical synchronization height */ - LtdcHandler.Init.VerticalSync = ILI9341_VSYNC; - /* Configure accumulated horizontal back porch */ - LtdcHandler.Init.AccumulatedHBP = ILI9341_HBP; - /* Configure accumulated vertical back porch */ - LtdcHandler.Init.AccumulatedVBP = ILI9341_VBP; - /* Configure accumulated active width */ - LtdcHandler.Init.AccumulatedActiveW = 269; - /* Configure accumulated active height */ - LtdcHandler.Init.AccumulatedActiveH = 323; - /* Configure total width */ - LtdcHandler.Init.TotalWidth = 279; - /* Configure total height */ - LtdcHandler.Init.TotalHeigh = 327; - - /* Configure R,G,B component values for LCD background color */ - LtdcHandler.Init.Backcolor.Red = 0; - LtdcHandler.Init.Backcolor.Blue = 0; - LtdcHandler.Init.Backcolor.Green = 0; - - /* LCD clock configuration */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ - /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; - PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; - PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; - HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); - - /* Polarity */ - LtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL; - LtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL; - LtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL; - LtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC; - - BSP_LCD_MspInit(); - HAL_LTDC_Init(&LtdcHandler); - - /* Select the device */ - LcdDrv = &ili9341_drv; - - /* LCD Init */ - LcdDrv->Init(); - - /* Initialize the SDRAM */ - BSP_SDRAM_Init(); - - /* Initialize the font */ - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - - return LCD_OK; -} - -/** - * @brief Gets the LCD X size. - * @retval The used LCD X size - */ -uint32_t BSP_LCD_GetXSize(void) -{ - return LcdDrv->GetLcdPixelWidth(); -} - -/** - * @brief Gets the LCD Y size. - * @retval The used LCD Y size - */ -uint32_t BSP_LCD_GetYSize(void) -{ - return LcdDrv->GetLcdPixelHeight(); -} - -/** - * @brief Initializes the LCD layers. - * @param LayerIndex: the layer foreground or background. - * @param FB_Address: the layer frame buffer. - */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) -{ - LCD_LayerCfgTypeDef Layercfg; - - /* Layer Init */ - Layercfg.WindowX0 = 0; - Layercfg.WindowX1 = BSP_LCD_GetXSize(); - Layercfg.WindowY0 = 0; - Layercfg.WindowY1 = BSP_LCD_GetYSize(); - Layercfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; - Layercfg.FBStartAdress = FB_Address; - Layercfg.Alpha = 255; - Layercfg.Alpha0 = 0; - Layercfg.Backcolor.Blue = 0; - Layercfg.Backcolor.Green = 0; - Layercfg.Backcolor.Red = 0; - Layercfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; - Layercfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; - Layercfg.ImageWidth = BSP_LCD_GetXSize(); - Layercfg.ImageHeight = BSP_LCD_GetYSize(); - - HAL_LTDC_ConfigLayer(&LtdcHandler, &Layercfg, LayerIndex); - - DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE; - DrawProp[LayerIndex].pFont = &Font24; - DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; - - /* Dithering activation */ - HAL_LTDC_EnableDither(&LtdcHandler); -} - -/** - * @brief Selects the LCD Layer. - * @param LayerIndex: the Layer foreground or background. - */ -void BSP_LCD_SelectLayer(uint32_t LayerIndex) -{ - ActiveLayer = LayerIndex; -} - -/** - * @brief Sets a LCD Layer visible. - * @param LayerIndex: the visible Layer. - * @param state: new state of the specified layer. - * This parameter can be: ENABLE or DISABLE. - */ -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState state) -{ - if (state == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&LtdcHandler, LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&LtdcHandler, LayerIndex); - } - __HAL_LTDC_RELOAD_CONFIG(&LtdcHandler); -} - -/** - * @brief Sets an LCD Layer visible without reloading. - * @param LayerIndex: Visible Layer - * @param State: New state of the specified layer - * This parameter can be one of the following values: - * @arg ENABLE - * @arg DISABLE - * @retval None - */ -void BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State) -{ - if (State == ENABLE) - { - __HAL_LTDC_LAYER_ENABLE(&LtdcHandler, LayerIndex); - } - else - { - __HAL_LTDC_LAYER_DISABLE(&LtdcHandler, LayerIndex); - } - /* Do not Sets the Reload */ -} - -/** - * @brief Configures the Transparency. - * @param LayerIndex: the Layer foreground or background. - * @param Transparency: the Transparency, - * This parameter must range from 0x00 to 0xFF. - */ -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency) -{ - HAL_LTDC_SetAlpha(&LtdcHandler, Transparency, LayerIndex); -} - -/** - * @brief Configures the transparency without reloading. - * @param LayerIndex: Layer foreground or background. - * @param Transparency: Transparency - * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF - * @retval None - */ -void BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency) -{ - HAL_LTDC_SetAlpha_NoReload(&LtdcHandler, Transparency, LayerIndex); -} - -/** - * @brief Sets a LCD layer frame buffer address. - * @param LayerIndex: specifies the Layer foreground or background - * @param Address: new LCD frame buffer value - */ -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address) -{ - HAL_LTDC_SetAddress(&LtdcHandler, Address, LayerIndex); -} - -/** - * @brief Sets an LCD layer frame buffer address without reloading. - * @param LayerIndex: Layer foreground or background - * @param Address: New LCD frame buffer value - * @retval None - */ -void BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address) -{ - HAL_LTDC_SetAddress_NoReload(&LtdcHandler, Address, LayerIndex); -} - -/** - * @brief Sets the Display window. - * @param LayerIndex: layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - */ -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* reconfigure the layer size */ - HAL_LTDC_SetWindowSize(&LtdcHandler, Width, Height, LayerIndex); - - /* reconfigure the layer position */ - HAL_LTDC_SetWindowPosition(&LtdcHandler, Xpos, Ypos, LayerIndex); -} - -/** - * @brief Sets display window without reloading. - * @param LayerIndex: Layer index - * @param Xpos: LCD X position - * @param Ypos: LCD Y position - * @param Width: LCD window width - * @param Height: LCD window height - * @retval None - */ -void BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Reconfigure the layer size */ - HAL_LTDC_SetWindowSize_NoReload(&LtdcHandler, Width, Height, LayerIndex); - - /* Reconfigure the layer position */ - HAL_LTDC_SetWindowPosition_NoReload(&LtdcHandler, Xpos, Ypos, LayerIndex); -} - -/** - * @brief Configures and sets the color Keying. - * @param LayerIndex: the Layer foreground or background - * @param RGBValue: the Color reference - */ -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying(&LtdcHandler, RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying(&LtdcHandler, LayerIndex); -} - -/** - * @brief Configures and sets the color keying without reloading. - * @param LayerIndex: Layer foreground or background - * @param RGBValue: Color reference - * @retval None - */ -void BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue) -{ - /* Configure and Enable the color Keying for LCD Layer */ - HAL_LTDC_ConfigColorKeying_NoReload(&LtdcHandler, RGBValue, LayerIndex); - HAL_LTDC_EnableColorKeying_NoReload(&LtdcHandler, LayerIndex); -} - -/** - * @brief Disables the color Keying. - * @param LayerIndex: the Layer foreground or background - */ -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying(&LtdcHandler, LayerIndex); -} - -/** - * @brief Disables the color keying without reloading. - * @param LayerIndex: Layer foreground or background - * @retval None - */ -void BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex) -{ - /* Disable the color Keying for LCD Layer */ - HAL_LTDC_DisableColorKeying_NoReload(&LtdcHandler, LayerIndex); -} - -/** - * @brief Disables the color keying without reloading. - * @param ReloadType: can be one of the following values - * - LCD_RELOAD_IMMEDIATE - * - LCD_RELOAD_VERTICAL_BLANKING - * @retval None - */ -void BSP_LCD_Relaod(uint32_t ReloadType) -{ - HAL_LTDC_Relaod(&LtdcHandler, ReloadType); -} - -/** - * @brief Gets the LCD Text color. - * @retval Text color - */ -uint32_t BSP_LCD_GetTextColor(void) -{ - return DrawProp[ActiveLayer].TextColor; -} - -/** - * @brief Gets the LCD Background color. - * @retval Background color - */ -uint32_t BSP_LCD_GetBackColor(void) -{ - return DrawProp[ActiveLayer].BackColor; -} - -/** - * @brief Sets the Text color. - * @param Color: the Text color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetTextColor(uint32_t Color) -{ - DrawProp[ActiveLayer].TextColor = Color; -} - -/** - * @brief Sets the Background color. - * @param Color: the layer Background color code ARGB(8-8-8-8) - */ -void BSP_LCD_SetBackColor(uint32_t Color) -{ - DrawProp[ActiveLayer].BackColor = Color; -} - -/** - * @brief Sets the Text Font. - * @param pFonts: the layer font to be used - */ -void BSP_LCD_SetFont(sFONT *pFonts) -{ - DrawProp[ActiveLayer].pFont = pFonts; -} - -/** - * @brief Gets the Text Font. - * @retval Layer font - */ -sFONT *BSP_LCD_GetFont(void) -{ - return DrawProp[ActiveLayer].pFont; -} - -/** - * @brief Reads Pixel. - * @param Xpos: the X position - * @param Ypos: the Y position - * @retval RGB pixel color - */ -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos) -{ - uint32_t ret = 0; - - if (LtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint32_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4 * (Ypos * BSP_LCD_GetXSize() + Xpos))); - } - else if (LtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888) - { - /* Read data value from SDRAM memory */ - ret = (*(__IO uint32_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4 * (Ypos * BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF); - } - else if ((LtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ - (LtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ - (LtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88)) - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint16_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2 * (Ypos * BSP_LCD_GetXSize() + Xpos))); - } - else - { - /* Read data value from SDRAM memory */ - ret = *(__IO uint8_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2 * (Ypos * BSP_LCD_GetXSize() + Xpos))); - } - - return ret; -} - -/** - * @brief Clears the hole LCD. - * @param Color: the color of the background - */ -void BSP_LCD_Clear(uint32_t Color) -{ - /* Clear the LCD */ - FillBuffer(ActiveLayer, (uint32_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), - BSP_LCD_GetYSize(), 0, Color); -} - -/** - * @brief Clears the selected line. - * @param Line: the line to be cleared - */ -void BSP_LCD_ClearStringLine(uint32_t Line) -{ - uint32_t colorbackup = DrawProp[ActiveLayer].TextColor; - DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor; - - /* Draw rectangle with background color */ - BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), - DrawProp[ActiveLayer].pFont->Height); - - DrawProp[ActiveLayer].TextColor = colorbackup; - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays one character. - * @param Xpos: start column address - * @param Ypos: the Line where to display the character shape - * @param Ascii: character ascii code, must be between 0x20 and 0x7E - */ -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii) -{ - DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii - ' ') *\ - DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]); -} - -/** - * @brief Displays a maximum of 60 char on the LCD. - * @param X: pointer to x position (in pixel) - * @param Y: pointer to y position (in pixel) - * @param pText: pointer to string to display on LCD - * @param mode: The display mode - * This parameter can be one of the following values: - * @arg CENTER_MODE - * @arg RIGHT_MODE - * @arg LEFT_MODE - */ -void BSP_LCD_DisplayStringAt(uint16_t X, uint16_t Y, uint8_t *pText, Text_AlignModeTypdef mode) -{ - uint16_t refcolumn = 1, i = 0; - uint32_t size = 0, xsize = 0; - uint8_t *ptr = pText; - - /* Get the text size */ - while (*ptr++) { size ++ ; } - - /* Characters number per line */ - xsize = (BSP_LCD_GetXSize() / DrawProp[ActiveLayer].pFont->Width); - - switch (mode) - { - case CENTER_MODE: - { - refcolumn = X + ((xsize - size) * DrawProp[ActiveLayer].pFont->Width) / 2; - break; - } - case LEFT_MODE: - { - refcolumn = X; - break; - } - case RIGHT_MODE: - { - refcolumn = X + ((xsize - size) * DrawProp[ActiveLayer].pFont->Width); - break; - } - default: - { - refcolumn = X; - break; - } - } - - /* Send the string character by character on LCD */ - while ((*pText != 0) & (((BSP_LCD_GetXSize() - (i * DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= - DrawProp[ActiveLayer].pFont->Width)) - { - /* Display one character on LCD */ - BSP_LCD_DisplayChar(refcolumn, Y, *pText); - /* Decrement the column position by 16 */ - refcolumn += DrawProp[ActiveLayer].pFont->Width; - /* Point on the next character */ - pText++; - i++; - } -} - -/** - * @brief Displays a maximum of 20 char on the LCD. - * @param Line: the Line where to display the character shape - * @param ptr: pointer to string to display on LCD - */ -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr) -{ - BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE); -} - -/** - * @brief Displays an horizontal line. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Length: line length - */ -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t xaddress = 0; - - /* Get the line address */ - xaddress = (LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4 * (BSP_LCD_GetXSize() * Ypos + Xpos); - - /* Write line */ - FillBuffer(ActiveLayer, (uint32_t *)xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays a vertical line. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Length: line length - */ -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) -{ - uint32_t xaddress = 0; - - /* Get the line address */ - xaddress = (LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4 * (BSP_LCD_GetXSize() * Ypos + Xpos); - - /* Write line */ - FillBuffer(ActiveLayer, (uint32_t *)xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays an uni-line (between two points). - * @param X1: the point 1 X position - * @param Y1: the point 1 Y position - * @param X2: the point 2 X position - * @param Y2: the point 2 Y position - */ -void BSP_LCD_DrawLine(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(X2 - X1); /* The difference between the x's */ - deltay = ABS(Y2 - Y1); /* The difference between the y's */ - x = X1; /* Start x off at the first pixel */ - y = Y1; /* Start y off at the first pixel */ - - if (X2 >= X1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (Y2 >= Y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */ - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Displays a rectangle. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Height: display rectangle height - * @param Width: display rectangle width - */ -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - /* Draw horizontal lines */ - BSP_LCD_DrawHLine(Xpos, Ypos, Width); - BSP_LCD_DrawHLine(Xpos, (Ypos + Height), Width); - - /* Draw vertical lines */ - BSP_LCD_DrawVLine(Xpos, Ypos, Height); - BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height); -} - -/** - * @brief Displays a circle. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Radius: the circle radius - */ -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t d;/* Decision Variable */ - uint32_t curx;/* Current X Value */ - uint32_t cury;/* Current Y Value */ - - d = 3 - (Radius << 1); - curx = 0; - cury = Radius; - - while (curx <= cury) - { - BSP_LCD_DrawPixel((Xpos + curx), (Ypos - cury), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos - curx), (Ypos - cury), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos + cury), (Ypos - curx), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos - cury), (Ypos - curx), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos + curx), (Ypos + cury), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos - curx), (Ypos + cury), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos + cury), (Ypos + curx), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos - cury), (Ypos + curx), DrawProp[ActiveLayer].TextColor); - - if (d < 0) - { - d += (curx << 2) + 6; - } - else - { - d += ((curx - cury) << 2) + 10; - cury--; - } - curx++; - } -} - -/** - * @brief Displays an poly-line (between many points). - * @param Points: pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount) -{ - int16_t x = 0, y = 0; - - if (PointCount < 2) - { - return; - } - - BSP_LCD_DrawLine(Points->X, Points->Y, (Points + PointCount - 1)->X, (Points + PointCount - 1)->Y); - - while (--PointCount) - { - x = Points->X; - y = Points->Y; - Points++; - BSP_LCD_DrawLine(x, y, Points->X, Points->Y); - } -} - -/** - * @brief Displays an Ellipse. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param XRadius: the X radius of ellipse - * @param YRadius: the Y radius of ellipse - */ -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2 - 2 * XRadius, e2; - float k = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - - k = (float)(rad2 / rad1); - - do - { - BSP_LCD_DrawPixel((Xpos - (uint16_t)(x / k)), (Ypos + y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos + (uint16_t)(x / k)), (Ypos + y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos + (uint16_t)(x / k)), (Ypos - y), DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawPixel((Xpos - (uint16_t)(x / k)), (Ypos - y), DrawProp[ActiveLayer].TextColor); - - e2 = err; - if (e2 <= x) - { - err += ++x * 2 + 1; - if (-y == x && e2 <= y) { e2 = 0; } - } - if (e2 > y) { err += ++y * 2 + 1; } - } while (y <= 0); -} - -/** - * @brief Displays a bitmap picture loaded in the internal Flash (32 bpp). - * @param X: the bmp x position in the LCD - * @param Y: the bmp Y position in the LCD - * @param pBmp: Bmp picture address in the internal Flash - */ -void BSP_LCD_DrawBitmap(uint32_t X, uint32_t Y, uint8_t *pBmp) -{ - uint32_t index = 0, width = 0, height = 0, bitpixel = 0; - uint32_t address; - uint32_t inputcolormode = 0; - - /* Get bitmap data address offset */ - index = pBmp[10] + (pBmp[11] << 8) + (pBmp[12] << 16) + (pBmp[13] << 24); - - /* Read bitmap width */ - width = pBmp[18] + (pBmp[19] << 8) + (pBmp[20] << 16) + (pBmp[21] << 24); - - /* Read bitmap height */ - height = pBmp[22] + (pBmp[23] << 8) + (pBmp[24] << 16) + (pBmp[25] << 24); - - /* Read bit/pixel */ - bitpixel = pBmp[28] + (pBmp[29] << 8); - - /* Set Address */ - address = LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize() * Y) + X) * (4)); - - /* Get the Layer pixel format */ - if ((bitpixel / 8) == 4) - { - inputcolormode = CM_ARGB8888; - } - else if ((bitpixel / 8) == 2) - { - inputcolormode = CM_RGB565; - } - else - { - inputcolormode = CM_RGB888; - } - - /* bypass the bitmap header */ - pBmp += (index + (width * (height - 1) * (bitpixel / 8))); - - /* Convert picture to ARGB8888 pixel format */ - for (index = 0; index < height; index++) - { - /* Pixel format conversion */ - ConvertLineToARGB8888((uint32_t *)pBmp, (uint32_t *)address, width, inputcolormode); - - /* Increment the source and destination buffers */ - address += ((BSP_LCD_GetXSize() - width + width) * 4); - pBmp -= width * (bitpixel / 8); - } -} - -/** - * @brief Displays a full rectangle. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Height: rectangle height - * @param Width: rectangle width - */ -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) -{ - uint32_t xaddress = 0; - - /* Set the text color */ - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - /* Get the rectangle start address */ - xaddress = (LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4 * (BSP_LCD_GetXSize() * Ypos + Xpos); - - /* Fill the rectangle */ - FillBuffer(ActiveLayer, (uint32_t *)xaddress, Width, Height, (BSP_LCD_GetXSize() - Width), - DrawProp[ActiveLayer].TextColor); -} - -/** - * @brief Displays a full circle. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param Radius: the circle radius - */ -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius) -{ - int32_t d; /* Decision Variable */ - uint32_t curx;/* Current X Value */ - uint32_t cury;/* Current Y Value */ - - d = 3 - (Radius << 1); - - curx = 0; - cury = Radius; - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - - while (curx <= cury) - { - if (cury > 0) - { - BSP_LCD_DrawHLine(Xpos - cury, Ypos + curx, 2 * cury); - BSP_LCD_DrawHLine(Xpos - cury, Ypos - curx, 2 * cury); - } - - if (curx > 0) - { - BSP_LCD_DrawHLine(Xpos - curx, Ypos - cury, 2 * curx); - BSP_LCD_DrawHLine(Xpos - curx, Ypos + cury, 2 * curx); - } - if (d < 0) - { - d += (curx << 2) + 6; - } - else - { - d += ((curx - cury) << 2) + 10; - cury--; - } - curx++; - } - - BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); - BSP_LCD_DrawCircle(Xpos, Ypos, Radius); -} - -/** - * @brief Fill triangle. - * @param X1: the point 1 x position - * @param Y1: the point 1 y position - * @param X2: the point 2 x position - * @param Y2: the point 2 y position - * @param X3: the point 3 x position - * @param Y3: the point 3 y position - */ -void BSP_LCD_FillTriangle(uint16_t X1, uint16_t X2, uint16_t X3, uint16_t Y1, uint16_t Y2, uint16_t Y3) -{ - int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, - yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0, - curpixel = 0; - - deltax = ABS(X2 - X1); /* The difference between the x's */ - deltay = ABS(Y2 - Y1); /* The difference between the y's */ - x = X1; /* Start x off at the first pixel */ - y = Y1; /* Start y off at the first pixel */ - - if (X2 >= X1) /* The x-values are increasing */ - { - xinc1 = 1; - xinc2 = 1; - } - else /* The x-values are decreasing */ - { - xinc1 = -1; - xinc2 = -1; - } - - if (Y2 >= Y1) /* The y-values are increasing */ - { - yinc1 = 1; - yinc2 = 1; - } - else /* The y-values are decreasing */ - { - yinc1 = -1; - yinc2 = -1; - } - - if (deltax >= deltay) /* There is at least one x-value for every y-value */ - { - xinc1 = 0; /* Don't change the x when numerator >= denominator */ - yinc2 = 0; /* Don't change the y for every iteration */ - den = deltax; - num = deltax / 2; - numadd = deltay; - numpixels = deltax; /* There are more x-values than y-values */ - } - else /* There is at least one y-value for every x-value */ - { - xinc2 = 0; /* Don't change the x for every iteration */ - yinc1 = 0; /* Don't change the y when numerator >= denominator */ - den = deltay; - num = deltay / 2; - numadd = deltax; - numpixels = deltay; /* There are more y-values than x-values */ - } - - for (curpixel = 0; curpixel <= numpixels; curpixel++) - { - BSP_LCD_DrawLine(x, y, X3, Y3); - - num += numadd; /* Increase the numerator by the top of the fraction */ - if (num >= den) /* Check if numerator >= denominator */ - { - num -= den; /* Calculate the new numerator value */ - x += xinc1; /* Change the x as appropriate */ - y += yinc1; /* Change the y as appropriate */ - } - x += xinc2; /* Change the x as appropriate */ - y += yinc2; /* Change the y as appropriate */ - } -} - -/** - * @brief Displays a full poly-line (between many points). - * @param Points: pointer to the points array - * @param PointCount: Number of points - */ -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount) -{ - - int16_t x = 0, y = 0, x2 = 0, y2 = 0, xcenter = 0, ycenter = 0, xfirst = 0, yfirst = 0, pixelx = 0, pixely = 0, counter = 0; - uint16_t imageleft = 0, imageright = 0, imagetop = 0, imagebottom = 0; - - imageleft = imageright = Points->X; - imagetop = imagebottom = Points->Y; - - for (counter = 1; counter < PointCount; counter++) - { - pixelx = POLY_X(counter); - if (pixelx < imageleft) - { - imageleft = pixelx; - } - if (pixelx > imageright) - { - imageright = pixelx; - } - - pixely = POLY_Y(counter); - if (pixely < imagetop) - { - imagetop = pixely; - } - if (pixely > imagebottom) - { - imagebottom = pixely; - } - } - - if (PointCount < 2) - { - return; - } - - xcenter = (imageleft + imageright) / 2; - ycenter = (imagebottom + imagetop) / 2; - - xfirst = Points->X; - yfirst = Points->Y; - - while (--PointCount) - { - x = Points->X; - y = Points->Y; - Points++; - x2 = Points->X; - y2 = Points->Y; - - BSP_LCD_FillTriangle(x, x2, xcenter, y, y2, ycenter); - BSP_LCD_FillTriangle(x, xcenter, x2, y, ycenter, y2); - BSP_LCD_FillTriangle(xcenter, x2, x, ycenter, y2, y); - } - - BSP_LCD_FillTriangle(xfirst, x2, xcenter, yfirst, y2, ycenter); - BSP_LCD_FillTriangle(xfirst, xcenter, x2, yfirst, ycenter, y2); - BSP_LCD_FillTriangle(xcenter, x2, xfirst, ycenter, y2, yfirst); -} - -/** - * @brief Draw a full ellipse. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param XRadius: X radius of ellipse - * @param YRadius: Y radius of ellipse. - */ -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius) -{ - int x = 0, y = -YRadius, err = 2 - 2 * XRadius, e2; - float K = 0, rad1 = 0, rad2 = 0; - - rad1 = XRadius; - rad2 = YRadius; - K = (float)(rad2 / rad1); - - do - { - BSP_LCD_DrawHLine((Xpos - (uint16_t)(x / K)), (Ypos + y), (2 * (uint16_t)(x / K) + 1)); - BSP_LCD_DrawHLine((Xpos - (uint16_t)(x / K)), (Ypos - y), (2 * (uint16_t)(x / K) + 1)); - - e2 = err; - if (e2 <= x) - { - err += ++x * 2 + 1; - if (-y == x && e2 <= y) { e2 = 0; } - } - if (e2 > y) { err += ++y * 2 + 1; } - } while (y <= 0); -} - -/** - * @brief Enables the Display. - */ -void BSP_LCD_DisplayOn(void) -{ - if (LcdDrv->DisplayOn != NULL) - { - LcdDrv->DisplayOn(); - } -} - -/** - * @brief Disables the Display. - */ -void BSP_LCD_DisplayOff(void) -{ - if (LcdDrv->DisplayOff != NULL) - { - LcdDrv->DisplayOff(); - } -} - -/******************************************************************************* - LTDC and DMA2D BSP Routines - *******************************************************************************/ - -/** - * @brief Initializes the LTDC MSP. - */ -__weak void BSP_LCD_MspInit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - /* Enable the LTDC and DMA2D Clock */ - __HAL_RCC_LTDC_CLK_ENABLE(); - __HAL_RCC_DMA2D_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /* GPIOs Configuration */ - /* - +------------------------+-----------------------+----------------------------+ - + LCD pins assignment + - +------------------------+-----------------------+----------------------------+ - | LCD_TFT R2 <-> PC.10 | LCD_TFT G2 <-> PA.06 | LCD_TFT B2 <-> PD.06 | - | LCD_TFT R3 <-> PB.00 | LCD_TFT G3 <-> PG.10 | LCD_TFT B3 <-> PG.11 | - | LCD_TFT R4 <-> PA.11 | LCD_TFT G4 <-> PB.10 | LCD_TFT B4 <-> PG.12 | - | LCD_TFT R5 <-> PA.12 | LCD_TFT G5 <-> PB.11 | LCD_TFT B5 <-> PA.03 | - | LCD_TFT R6 <-> PB.01 | LCD_TFT G6 <-> PC.07 | LCD_TFT B6 <-> PB.08 | - | LCD_TFT R7 <-> PG.06 | LCD_TFT G7 <-> PD.03 | LCD_TFT B7 <-> PB.09 | - ------------------------------------------------------------------------------- - | LCD_TFT HSYNC <-> PC.06 | LCDTFT VSYNC <-> PA.04 | - | LCD_TFT CLK <-> PG.07 | LCD_TFT DE <-> PF.10 | - ----------------------------------------------------- - */ - - /* GPIOA configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_6 | - GPIO_PIN_11 | GPIO_PIN_12; - GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - GPIO_InitStructure.Alternate = GPIO_AF14_LTDC; - HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); - - /* GPIOB configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_8 | \ - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11; - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* GPIOC configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_10; - HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* GPIOD configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_3 | GPIO_PIN_6; - HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); - - /* GPIOF configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_10; - HAL_GPIO_Init(GPIOF, &GPIO_InitStructure); - - /* GPIOG configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | \ - GPIO_PIN_11; - HAL_GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* GPIOB configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1; - GPIO_InitStructure.Alternate = GPIO_AF9_LTDC; - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* GPIOG configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_10 | GPIO_PIN_12; - HAL_GPIO_Init(GPIOG, &GPIO_InitStructure); -} - -/******************************************************************************* - Static Functions - *******************************************************************************/ - -/** - * @brief Writes Pixel. - * @param Xpos: the X position - * @param Ypos: the Y position - * @param RGB_Code: the pixel color in ARGB mode (8-8-8-8) - */ -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code) -{ - /* Write data value to all SDRAM memory */ - *(__IO uint32_t *)(LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4 * (Ypos * BSP_LCD_GetXSize() + Xpos))) = RGB_Code; -} - -/** - * @brief Draws a character on LCD. - * @param Xpos: the Line where to display the character shape - * @param Ypos: start column address - * @param c: pointer to the character data - */ -static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c) -{ - uint32_t i = 0, j = 0; - uint16_t height, width; - uint8_t offset; - uint8_t *pchar; - uint32_t line = 0; - - height = DrawProp[ActiveLayer].pFont->Height; - width = DrawProp[ActiveLayer].pFont->Width; - - offset = 8 * ((width + 7) / 8) - width ; - - for (i = 0; i < height; i++) - { - pchar = ((uint8_t *)c + (width + 7) / 8 * i); - - switch (((width + 7) / 8)) - { - case 1: - line = pchar[0]; - break; - - case 2: - line = (pchar[0] << 8) | pchar[1]; - break; - - case 3: - default: - line = (pchar[0] << 16) | (pchar[1] << 8) | pchar[2]; - break; - } - - for (j = 0; j < width; j++) - { - if (line & (1 << (width - j + offset - 1))) - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor); - } - else - { - BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor); - } - } - Ypos++; - } -} - -/** - * @brief Fills buffer. - * @param LayerIndex: layer index - * @param pDst: output color - * @param xSize: buffer width - * @param ySize: buffer height - * @param OffLine: offset - * @param ColorIndex: color Index - */ -static void FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, - uint32_t ColorIndex) -{ - - /* Register to memory mode with ARGB8888 as color Mode */ - Dma2dHandler.Init.Mode = DMA2D_R2M; - Dma2dHandler.Init.ColorMode = DMA2D_ARGB8888; - Dma2dHandler.Init.OutputOffset = OffLine; - - Dma2dHandler.Instance = DMA2D; - - /* DMA2D Initialization */ - if (HAL_DMA2D_Init(&Dma2dHandler) == HAL_OK) - { - if (HAL_DMA2D_ConfigLayer(&Dma2dHandler, LayerIndex) == HAL_OK) - { - if (HAL_DMA2D_Start(&Dma2dHandler, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&Dma2dHandler, 10); - } - } - } -} - -/** - * @brief Converts Line to ARGB8888 pixel format. - * @param pSrc: pointer to source buffer - * @param pDst: output color - * @param xSize: buffer width - * @param ColorMode: input color mode - */ -static void ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode) -{ - /* Configure the DMA2D Mode, Color Mode and output offset */ - Dma2dHandler.Init.Mode = DMA2D_M2M_PFC; - Dma2dHandler.Init.ColorMode = DMA2D_ARGB8888; - Dma2dHandler.Init.OutputOffset = 0; - - /* Foreground Configuration */ - Dma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; - Dma2dHandler.LayerCfg[1].InputAlpha = 0xFF; - Dma2dHandler.LayerCfg[1].InputColorMode = ColorMode; - Dma2dHandler.LayerCfg[1].InputOffset = 0; - - Dma2dHandler.Instance = DMA2D; - - /* DMA2D Initialization */ - if (HAL_DMA2D_Init(&Dma2dHandler) == HAL_OK) - { - if (HAL_DMA2D_ConfigLayer(&Dma2dHandler, 1) == HAL_OK) - { - if (HAL_DMA2D_Start(&Dma2dHandler, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK) - { - /* Polling For DMA transfer */ - HAL_DMA2D_PollForTransfer(&Dma2dHandler, 10); - } - } - } -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.h deleted file mode 100644 index 186969625c..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_lcd.h +++ /dev/null @@ -1,246 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_lcd.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f429i_discovery_lcd.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_LCD_H -#define __STM32F429I_DISCOVERY_LCD_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" -/* Include SDRAM Driver */ -#include "stm32f429i_discovery_sdram.h" -#include "../../../Utilities/Fonts/fonts.h" -/* Include LCD component driver */ -#include "../Components/ili9341/ili9341.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_LCD - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Exported_Types STM32F429I DISCOVERY LCD Exported Types - * @{ - */ -typedef enum -{ - LCD_OK = 0, - LCD_ERROR = 1, - LCD_TIMEOUT = 2 -} LCD_StatusTypeDef; - -typedef struct -{ - uint32_t TextColor; - uint32_t BackColor; - sFONT *pFont; -} LCD_DrawPropTypeDef; - -typedef struct -{ - int16_t X; - int16_t Y; -} Point, * pPoint; - -/** - * @brief Line mode structures definition - */ -typedef enum -{ - CENTER_MODE = 0x01, /* center mode */ - RIGHT_MODE = 0x02, /* right mode */ - LEFT_MODE = 0x03, /* left mode */ -} Text_AlignModeTypdef; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Exported_Constants STM32F429I DISCOVERY LCD Exported Constants - * @{ - */ -#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef - -/** - * @brief LCD status structure definition - */ -#define MAX_LAYER_NUMBER 2 -#define LCD_FRAME_BUFFER ((uint32_t)0xD0000000) -#define BUFFER_OFFSET ((uint32_t)0x50000) - -/** - * @brief LCD color - */ -#define LCD_COLOR_BLUE 0xFF0000FF -#define LCD_COLOR_GREEN 0xFF00FF00 -#define LCD_COLOR_RED 0xFFFF0000 -#define LCD_COLOR_CYAN 0xFF00FFFF -#define LCD_COLOR_MAGENTA 0xFFFF00FF -#define LCD_COLOR_YELLOW 0xFFFFFF00 -#define LCD_COLOR_LIGHTBLUE 0xFF8080FF -#define LCD_COLOR_LIGHTGREEN 0xFF80FF80 -#define LCD_COLOR_LIGHTRED 0xFFFF8080 -#define LCD_COLOR_LIGHTCYAN 0xFF80FFFF -#define LCD_COLOR_LIGHTMAGENTA 0xFFFF80FF -#define LCD_COLOR_LIGHTYELLOW 0xFFFFFF80 -#define LCD_COLOR_DARKBLUE 0xFF000080 -#define LCD_COLOR_DARKGREEN 0xFF008000 -#define LCD_COLOR_DARKRED 0xFF800000 -#define LCD_COLOR_DARKCYAN 0xFF008080 -#define LCD_COLOR_DARKMAGENTA 0xFF800080 -#define LCD_COLOR_DARKYELLOW 0xFF808000 -#define LCD_COLOR_WHITE 0xFFFFFFFF -#define LCD_COLOR_LIGHTGRAY 0xFFD3D3D3 -#define LCD_COLOR_GRAY 0xFF808080 -#define LCD_COLOR_DARKGRAY 0xFF404040 -#define LCD_COLOR_BLACK 0xFF000000 -#define LCD_COLOR_BROWN 0xFFA52A2A -#define LCD_COLOR_ORANGE 0xFFFFA500 -#define LCD_COLOR_TRANSPARENT 0xFF000000 -/** - * @brief LCD default font - */ -#define LCD_DEFAULT_FONT Font24 - -/** - * @brief LCD Reload Types - */ -#define LCD_RELOAD_IMMEDIATE ((uint32_t)LTDC_SRCR_IMR) -#define LCD_RELOAD_VERTICAL_BLANKING ((uint32_t)LTDC_SRCR_VBR) - -/** - * @brief LCD Layer - */ -#define LCD_BACKGROUND_LAYER 0x0000 -#define LCD_FOREGROUND_LAYER 0x0001 - -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Exported_Macros STM32F429I DISCOVERY LCD Exported Macros - * @{ - */ -/** - * @brief LCD Pixel format - */ -#define LCD_PIXEL_FORMAT_ARGB8888 LTDC_PIXEL_FORMAT_ARGB8888 -#define LCD_PIXEL_FORMAT_RGB888 LTDC_PIXEL_FORMAT_RGB888 -#define LCD_PIXEL_FORMAT_RGB565 LTDC_PIXEL_FORMAT_RGB565 -#define LCD_PIXEL_FORMAT_ARGB1555 LTDC_PIXEL_FORMAT_ARGB1555 -#define LCD_PIXEL_FORMAT_ARGB4444 LTDC_PIXEL_FORMAT_ARGB4444 -#define LCD_PIXEL_FORMAT_L8 LTDC_PIXEL_FORMAT_L8 -#define LCD_PIXEL_FORMAT_AL44 LTDC_PIXEL_FORMAT_AL44 -#define LCD_PIXEL_FORMAT_AL88 LTDC_PIXEL_FORMAT_AL88 -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_LCD_Exported_Functions STM32F429I DISCOVERY LCD Exported Functions - * @{ - */ -uint8_t BSP_LCD_Init(void); -uint32_t BSP_LCD_GetXSize(void); -uint32_t BSP_LCD_GetYSize(void); - -/* functions using the LTDC controller */ -void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer); -void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency); -void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address); -void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue); -void BSP_LCD_ResetColorKeying(uint32_t LayerIndex); -void BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex); -void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, - uint16_t Height); -void BSP_LCD_SelectLayer(uint32_t LayerIndex); -void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState state); -void BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State); -void BSP_LCD_Relaod(uint32_t ReloadType); - -void BSP_LCD_SetTextColor(uint32_t Color); -void BSP_LCD_SetBackColor(uint32_t Color); -uint32_t BSP_LCD_GetTextColor(void); -uint32_t BSP_LCD_GetBackColor(void); -void BSP_LCD_SetFont(sFONT *pFonts); -sFONT *BSP_LCD_GetFont(void); - -uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos); -void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel); -void BSP_LCD_Clear(uint32_t Color); -void BSP_LCD_ClearStringLine(uint32_t Line); -void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr); -void BSP_LCD_DisplayStringAt(uint16_t X, uint16_t Y, uint8_t *pText, Text_AlignModeTypdef mode); -void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii); - -void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length); -void BSP_LCD_DrawLine(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2); -void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius); -void BSP_LCD_DrawBitmap(uint32_t X, uint32_t Y, uint8_t *pBmp); - -void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height); -void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius); -void BSP_LCD_FillTriangle(uint16_t X1, uint16_t X2, uint16_t X3, uint16_t Y1, uint16_t Y2, uint16_t Y3); -void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount); -void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius); - -void BSP_LCD_DisplayOff(void); -void BSP_LCD_DisplayOn(void); - -/* This function can be modified in case the current settings need to be changed - for specific application needs */ -void BSP_LCD_MspInit(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_LCD_H */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.c deleted file mode 100644 index 23de02b7c5..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.c +++ /dev/null @@ -1,460 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_sdram.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to drive the - * IS42S16400J SDRAM memory mounted on STM32F429I-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery_sdram.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM STM32F429I DISCOVERY SDRAM - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Types_Definitions STM32F429I DISCOVERY SDRAM Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Defines STM32F429I DISCOVERY SDRAM Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Macros STM32F429I DISCOVERY SDRAM Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Variables STM32F429I DISCOVERY SDRAM Private Variables - * @{ - */ -static SDRAM_HandleTypeDef SdramHandle; -static FMC_SDRAM_TimingTypeDef Timing; -static FMC_SDRAM_CommandTypeDef Command; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Function_Prototypes STM32F429I DISCOVERY SDRAM Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Private_Functions STM32F429I DISCOVERY SDRAM Private Functions - * @{ - */ - -/** - * @brief Initializes the SDRAM device. - */ -uint8_t BSP_SDRAM_Init(void) -{ - static uint8_t sdramstatus = SDRAM_ERROR; - - /* SDRAM device configuration */ - SdramHandle.Instance = FMC_SDRAM_DEVICE; - - /* FMC Configuration -------------------------------------------------------*/ - /* FMC SDRAM Bank configuration */ - /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */ - /* TMRD: 2 Clock cycles */ - Timing.LoadToActiveDelay = 2; - /* TXSR: min=70ns (7x11.11ns) */ - Timing.ExitSelfRefreshDelay = 7; - /* TRAS: min=42ns (4x11.11ns) max=120k (ns) */ - Timing.SelfRefreshTime = 4; - /* TRC: min=70 (7x11.11ns) */ - Timing.RowCycleDelay = 7; - /* TWR: min=1+ 7ns (1+1x11.11ns) */ - Timing.WriteRecoveryTime = 2; - /* TRP: 20ns => 2x11.11ns*/ - Timing.RPDelay = 2; - /* TRCD: 20ns => 2x11.11ns */ - Timing.RCDDelay = 2; - - /* FMC SDRAM control configuration */ - SdramHandle.Init.SDBank = FMC_SDRAM_BANK2; - /* Row addressing: [7:0] */ - SdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; - /* Column addressing: [11:0] */ - SdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; - SdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH; - SdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - SdramHandle.Init.CASLatency = SDRAM_CAS_LATENCY; - SdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; - SdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD; - SdramHandle.Init.ReadBurst = SDRAM_READBURST; - SdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1; - - /* SDRAM controller initialization */ - /* __weak function can be surcharged by the application code */ - BSP_SDRAM_MspInit(&SdramHandle, (void *)NULL); - if (HAL_SDRAM_Init(&SdramHandle, &Timing) != HAL_OK) - { - sdramstatus = SDRAM_ERROR; - } - else - { - sdramstatus = SDRAM_OK; - } - - /* SDRAM initialization sequence */ - BSP_SDRAM_Initialization_sequence(REFRESH_COUNT); - - return sdramstatus; -} - -/** - * @brief Programs the SDRAM device. - * @param RefreshCount: SDRAM refresh counter value - */ -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount) -{ - __IO uint32_t tmpmrd = 0; - - /* Step 1: Configure a clock configuration enable command */ - Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&SdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 2: Insert 100 us minimum delay */ - /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */ - HAL_Delay(1); - - /* Step 3: Configure a PALL (precharge all) command */ - Command.CommandMode = FMC_SDRAM_CMD_PALL; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&SdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 4: Configure an Auto Refresh command */ - Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; - Command.AutoRefreshNumber = 4; - Command.ModeRegisterDefinition = 0; - - /* Send the command */ - HAL_SDRAM_SendCommand(&SdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 5: Program the external memory mode register */ - tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 | - SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL | - SDRAM_MODEREG_CAS_LATENCY_3 | - SDRAM_MODEREG_OPERATING_MODE_STANDARD | - SDRAM_MODEREG_WRITEBURST_MODE_SINGLE; - - Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE; - Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; - Command.AutoRefreshNumber = 1; - Command.ModeRegisterDefinition = tmpmrd; - - /* Send the command */ - HAL_SDRAM_SendCommand(&SdramHandle, &Command, SDRAM_TIMEOUT); - - /* Step 6: Set the refresh rate counter */ - /* Set the device refresh rate */ - HAL_SDRAM_ProgramRefreshRate(&SdramHandle, RefreshCount); -} - -/** - * @brief Reads an mount of data from the SDRAM memory in polling mode. - * @param uwStartAddress : Read start address - * @param pData : Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - */ -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if (HAL_SDRAM_Read_32b(&SdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Reads an mount of data from the SDRAM memory in DMA mode. - * @param uwStartAddress : Read start address - * @param pData : Pointer to data to be read - * @param uwDataSize: Size of read data from the memory - */ -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if (HAL_SDRAM_Read_DMA(&SdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in polling mode. - * @param uwStartAddress : Write start address - * @param pData : Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - */ -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - /* Disable write protection */ - HAL_SDRAM_WriteProtection_Disable(&SdramHandle); - - /*Write 32-bit data buffer to SDRAM memory*/ - if (HAL_SDRAM_Write_32b(&SdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Writes an mount of data to the SDRAM memory in DMA mode. - * @param uwStartAddress : Write start address - * @param pData : Pointer to data to be written - * @param uwDataSize: Size of written data from the memory - */ -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) -{ - if (HAL_SDRAM_Write_DMA(&SdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Sends command to the SDRAM bank. - * @param SdramCmd: Pointer to SDRAM command structure - * @retval HAL status - */ -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd) -{ - if (HAL_SDRAM_SendCommand(&SdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK) - { - return SDRAM_ERROR; - } - else - { - return SDRAM_OK; - } -} - -/** - * @brief Handles SDRAM DMA transfer interrupt request. - */ -void BSP_SDRAM_DMA_IRQHandler(void) -{ - HAL_DMA_IRQHandler(SdramHandle.hdma); -} - -/** - * @brief Initializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dmaHandle; - GPIO_InitTypeDef GPIO_InitStructure; - - if (hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Enable FMC clock */ - __HAL_RCC_FMC_CLK_ENABLE(); - - /* Enable chosen DMAx clock */ - __DMAx_CLK_ENABLE(); - - /* Enable GPIOs clock */ - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOG_CLK_ENABLE(); - - /*-- GPIOs Configuration -----------------------------------------------------*/ - /* - +-------------------+--------------------+--------------------+--------------------+ - + SDRAM pins assignment + - +-------------------+--------------------+--------------------+--------------------+ - | PD0 <-> FMC_D2 | PE0 <-> FMC_NBL0 | PF0 <-> FMC_A0 | PG0 <-> FMC_A10 | - | PD1 <-> FMC_D3 | PE1 <-> FMC_NBL1 | PF1 <-> FMC_A1 | PG1 <-> FMC_A11 | - | PD8 <-> FMC_D13 | PE7 <-> FMC_D4 | PF2 <-> FMC_A2 | PG8 <-> FMC_SDCLK | - | PD9 <-> FMC_D14 | PE8 <-> FMC_D5 | PF3 <-> FMC_A3 | PG15 <-> FMC_NCAS | - | PD10 <-> FMC_D15 | PE9 <-> FMC_D6 | PF4 <-> FMC_A4 |--------------------+ - | PD14 <-> FMC_D0 | PE10 <-> FMC_D7 | PF5 <-> FMC_A5 | - | PD15 <-> FMC_D1 | PE11 <-> FMC_D8 | PF11 <-> FMC_NRAS | - +-------------------| PE12 <-> FMC_D9 | PF12 <-> FMC_A6 | - | PE13 <-> FMC_D10 | PF13 <-> FMC_A7 | - | PE14 <-> FMC_D11 | PF14 <-> FMC_A8 | - | PE15 <-> FMC_D12 | PF15 <-> FMC_A9 | - +-------------------+--------------------+--------------------+ - | PB5 <-> FMC_SDCKE1| - | PB6 <-> FMC_SDNE1 | - | PC0 <-> FMC_SDNWE | - +-------------------+ - - */ - - /* Common GPIO configuration */ - GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; - GPIO_InitStructure.Speed = GPIO_SPEED_FAST; - GPIO_InitStructure.Pull = GPIO_NOPULL; - GPIO_InitStructure.Alternate = GPIO_AF12_FMC; - - /* GPIOB configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_5 | GPIO_PIN_6; - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); - - /* GPIOC configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0; - HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); - - /* GPIOD configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | - GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 | - GPIO_PIN_15; - HAL_GPIO_Init(GPIOD, &GPIO_InitStructure); - - /* GPIOE configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7 | - GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | - GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | - GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOE, &GPIO_InitStructure); - - /* GPIOF configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | - GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | - GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | - GPIO_PIN_14 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOF, &GPIO_InitStructure); - - /* GPIOG configuration */ - GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | - GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_15; - HAL_GPIO_Init(GPIOG, &GPIO_InitStructure); - - /* Configure common DMA parameters */ - dmaHandle.Init.Channel = SDRAM_DMAx_CHANNEL; - dmaHandle.Init.Direction = DMA_MEMORY_TO_MEMORY; - dmaHandle.Init.PeriphInc = DMA_PINC_ENABLE; - dmaHandle.Init.MemInc = DMA_MINC_ENABLE; - dmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - dmaHandle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - dmaHandle.Init.Mode = DMA_NORMAL; - dmaHandle.Init.Priority = DMA_PRIORITY_HIGH; - dmaHandle.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - dmaHandle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - dmaHandle.Init.MemBurst = DMA_MBURST_SINGLE; - dmaHandle.Init.PeriphBurst = DMA_PBURST_SINGLE; - - dmaHandle.Instance = SDRAM_DMAx_STREAM; - - /* Associate the DMA handle */ - __HAL_LINKDMA(hsdram, hdma, dmaHandle); - - /* Deinitialize the stream for new transfer */ - HAL_DMA_DeInit(&dmaHandle); - - /* Configure the DMA stream */ - HAL_DMA_Init(&dmaHandle); - - /* NVIC configuration for DMA transfer complete interrupt */ - HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 0x0F, 0); - HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @brief DeInitializes SDRAM MSP. - * @note This function can be surcharged by application code. - * @param hsdram: pointer on SDRAM handle - * @param Params: pointer on additional configuration parameters, can be NULL. - */ -__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params) -{ - static DMA_HandleTypeDef dma_handle; - - if (hsdram != (SDRAM_HandleTypeDef *)NULL) - { - /* Disable NVIC configuration for DMA interrupt */ - HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn); - - /* Deinitialize the stream for new transfer */ - dma_handle.Instance = SDRAM_DMAx_STREAM; - HAL_DMA_DeInit(&dma_handle); - - /* DeInit GPIO pins can be done in the application - (by surcharging this __weak function) */ - - /* GPIO pins clock, FMC clock and DMA clock can be shut down in the application - by surcharging this __weak function */ - - } /* of if(hsdram != (SDRAM_HandleTypeDef *)NULL) */ -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.h deleted file mode 100644 index f2cb9c2235..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_sdram.h +++ /dev/null @@ -1,169 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_sdram.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f429i_discovery_sdram.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_SDRAM_H -#define __STM32F429I_DISCOVERY_SDRAM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_SDRAM - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Exported_Types STM32F429I DISCOVERY SDRAM Exported Types - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Exported_Constants STM32F429I DISCOVERY SDRAM Exported Constants - * @{ - */ - -/** - * @brief SDRAM status structure definition - */ -#define SDRAM_OK ((uint8_t)0x00) -#define SDRAM_ERROR ((uint8_t)0x01) - -/** - * @brief FMC SDRAM Bank address - */ -#define SDRAM_DEVICE_ADDR ((uint32_t)0xD0000000) -#define SDRAM_DEVICE_SIZE ((uint32_t)0x800000) /* SDRAM device size in Bytes */ - -/** - * @brief FMC SDRAM Memory Width - */ -/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_8 */ -#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_16 - -/** - * @brief FMC SDRAM CAS Latency - */ -/* #define SDRAM_CAS_LATENCY FMC_SDRAM_CAS_LATENCY_2 */ -#define SDRAM_CAS_LATENCY FMC_SDRAM_CAS_LATENCY_3 - -/** - * @brief FMC SDRAM Memory clock period - */ -#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2 /* Default configuration used with LCD */ -/* #define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_3 */ - -/** - * @brief FMC SDRAM Memory Read Burst feature - */ -#define SDRAM_READBURST FMC_SDRAM_RBURST_DISABLE /* Default configuration used with LCD */ -/* #define SDRAM_READBURST FMC_SDRAM_RBURST_ENABLE */ - -/** - * @brief FMC SDRAM Bank Remap - */ -/* #define SDRAM_BANK_REMAP */ - -/* Set the refresh rate counter */ -/* (15.62 us x Freq) - 20 */ -#define REFRESH_COUNT ((uint32_t)1386) /* SDRAM refresh counter */ -#define SDRAM_TIMEOUT ((uint32_t)0xFFFF) - -/* DMA definitions for SDRAM DMA transfer */ -#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE -#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0 -#define SDRAM_DMAx_STREAM DMA2_Stream0 -#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn -#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler - -/** - * @brief FMC SDRAM Mode definition register defines - */ -#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) -#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) -#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) -#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) -#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) -#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) -#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) -#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) -#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Exported_Macro STM32F429I DISCOVERY SDRAM Exported Macro - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_SDRAM_Exported_Functions STM32F429I DISCOVERY SDRAM Exported Functions - * @{ - */ -uint8_t BSP_SDRAM_Init(void); -void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount); -uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); -uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd); -void BSP_SDRAM_DMA_IRQHandler(void); - -/* These function can be modified in case the current settings (e.g. DMA stream) - need to be changed for specific application needs */ -void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params); -void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_SDRAM_H */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.c b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.c deleted file mode 100644 index b45f447556..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.c +++ /dev/null @@ -1,250 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_ts.c - * @author MCD Application Team - * @brief This file provides a set of functions needed to manage Touch - * screen available with STMPE811 IO Expander device mounted on - * STM32F429I-Discovery Kit. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery_ts.h" -#include "stm32f429i_discovery_io.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_TS STM32F429I DISCOVERY TS - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Types_Definitions STM32F429I DISCOVERY TS Private Types Definitions - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Defines STM32F429I DISCOVERY TS Private Defines - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Macros STM32F429I DISCOVERY TS Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Variables STM32F429I DISCOVERY TS Private Variables - * @{ - */ -static TS_DrvTypeDef *TsDrv; -static uint16_t TsXBoundary, TsYBoundary; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Function_Prototypes STM32F429I DISCOVERY TS Private Function Prototypes - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Private_Functions STM32F429I DISCOVERY TS Private Functions - * @{ - */ - -/** - * @brief Initializes and configures the touch screen functionalities and - * configures all necessary hardware resources (GPIOs, clocks..). - * @param XSize: The maximum X size of the TS area on LCD - * @param YSize: The maximum Y size of the TS area on LCD - * @retval TS_OK: if all initializations are OK. Other value if error. - */ -uint8_t BSP_TS_Init(uint16_t XSize, uint16_t YSize) -{ - uint8_t ret = TS_ERROR; - - /* Initialize x and y positions boundaries */ - TsXBoundary = XSize; - TsYBoundary = YSize; - - /* Read ID and verify if the IO expander is ready */ - if (stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID) - { - /* Initialize the TS driver structure */ - TsDrv = &stmpe811_ts_drv; - - ret = TS_OK; - } - - if (ret == TS_OK) - { - /* Initialize the LL TS Driver */ - TsDrv->Init(TS_I2C_ADDRESS); - TsDrv->Start(TS_I2C_ADDRESS); - } - - return ret; -} - -/** - * @brief Configures and enables the touch screen interrupts. - * @retval TS_OK: if ITconfig is OK. Other value if error. - */ -uint8_t BSP_TS_ITConfig(void) -{ - /* Enable the TS ITs */ - TsDrv->EnableIT(TS_I2C_ADDRESS); - - return TS_OK; -} - -/** - * @brief Gets the TS IT status. - * @retval Interrupt status. - */ -uint8_t BSP_TS_ITGetStatus(void) -{ - /* Return the TS IT status */ - return (TsDrv->GetITStatus(TS_I2C_ADDRESS)); -} - -/** - * @brief Returns status and positions of the touch screen. - * @param TsState: Pointer to touch screen current state structure - */ -void BSP_TS_GetState(TS_StateTypeDef *TsState) -{ - static uint32_t _x = 0, _y = 0; - uint16_t xDiff, yDiff, x, y, xr, yr; - - TsState->TouchDetected = TsDrv->DetectTouch(TS_I2C_ADDRESS); - - if (TsState->TouchDetected) - { - TsDrv->GetXY(TS_I2C_ADDRESS, &x, &y); - -#if defined (USE_STM32F429I_DISCOVERY_REVD) - if (y > 3700) - { - y = 3700; - } - else if (y < 180) - { - y = 180; - } - - /* Y value first correction */ - y = 3700 - y; -#else - - /* Y value first correction */ - y -= 360; - -#endif - - /* Y value second correction */ - yr = y / 11; - - /* Return y position value */ - if (yr <= 0) - { - yr = 0; - } - else if (yr > TsYBoundary) - { - yr = TsYBoundary - 1; - } - else - {} - y = yr; - - /* X value first correction */ - if (x <= 3000) - { - x = 3870 - x; - } - else - { - x = 3800 - x; - } - - /* X value second correction */ - xr = x / 15; - - /* Return X position value */ - if (xr <= 0) - { - xr = 0; - } - else if (xr > TsXBoundary) - { - xr = TsXBoundary - 1; - } - else - {} - - x = xr; - xDiff = x > _x ? (x - _x): (_x - x); - yDiff = y > _y ? (y - _y) : (_y - y); - - if (xDiff + yDiff > 5) - { - _x = x; - _y = y; - } - - /* Update the X position */ - TsState->X = _x; - - /* Update the Y position */ - TsState->Y = _y; - } -} - -/** - * @brief Clears all touch screen interrupts. - */ -void BSP_TS_ITClear(void) -{ - /* Clear TS IT pending bits */ - TsDrv->ClearIT(TS_I2C_ADDRESS); -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.h b/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.h deleted file mode 100644 index b2b7887b59..0000000000 --- a/Drivers/BSP/STM32F429I-Discovery/stm32f429i_discovery_ts.h +++ /dev/null @@ -1,113 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f429i_discovery_ts.h - * @author MCD Application Team - * @brief This file contains all the functions prototypes for the - * stm32f429i_discovery_ts.c driver. - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F429I_DISCOVERY_TS_H -#define __STM32F429I_DISCOVERY_TS_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f429i_discovery.h" -/* Include TouchScreen component driver */ -#include "../Components/stmpe811/stmpe811.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY - * @{ - */ - -/** @addtogroup STM32F429I_DISCOVERY_TS - * @{ - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Exported_Types STM32F429I DISCOVERY TS Exported Types - * @{ - */ -typedef struct -{ - uint16_t TouchDetected; - uint16_t X; - uint16_t Y; - uint16_t Z; -} TS_StateTypeDef; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Exported_Constants STM32F429I DISCOVERY TS Exported Constants - * @{ - */ -#define TS_SWAP_NONE 0x00 -#define TS_SWAP_X 0x01 -#define TS_SWAP_Y 0x02 -#define TS_SWAP_XY 0x04 - -typedef enum -{ - TS_OK = 0x00, - TS_ERROR = 0x01, - TS_TIMEOUT = 0x02 -} TS_StatusTypeDef; -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Exported_Macros STM32F429I DISCOVERY TS Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F429I_DISCOVERY_TS_Exported_Functions STM32F429I DISCOVERY TS Exported Functions - * @{ - */ -uint8_t BSP_TS_Init(uint16_t XSize, uint16_t YSize); -void BSP_TS_GetState(TS_StateTypeDef *TsState); -uint8_t BSP_TS_ITConfig(void); -uint8_t BSP_TS_ITGetStatus(void); -void BSP_TS_ITClear(void); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F429I_DISCOVERY_TS_H */ diff --git a/Drivers/BSP/STM32F4xx-Nucleo b/Drivers/BSP/STM32F4xx-Nucleo new file mode 160000 index 0000000000..84b99c7629 --- /dev/null +++ b/Drivers/BSP/STM32F4xx-Nucleo @@ -0,0 +1 @@ +Subproject commit 84b99c762908ef56f711acf970ab13d4ec278df6 diff --git a/Drivers/BSP/STM32F4xx-Nucleo/LICENSE.md b/Drivers/BSP/STM32F4xx-Nucleo/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F4xx-Nucleo/README.md b/Drivers/BSP/STM32F4xx-Nucleo/README.md deleted file mode 100644 index 754a912ed1..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# BSP STM32F4XX-NUCLEO Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f4xx-nucleo.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f4xx-nucleo** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F4XX-NUCLEO** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f4xx-nucleo/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F4xx-Nucleo/Release_Notes.html b/Drivers/BSP/STM32F4xx-Nucleo/Release_Notes.html deleted file mode 100644 index f0f0481908..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/Release_Notes.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - Release Notes for STM32F4xx-Nucleo Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F4xx-Nucleo Board Drivers

-

Copyright © 2017 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F4xx-Nucleo Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add general description of BSP drivers
  • -
  • Remove date & version
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Replace __PPP_CLK_ENABLE/DISABLE with __HAL_RCC_PPP_ENABLE/DISABLE
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c -
      -
    • BSP_JOY_GetState() alignment with HAL ADC driver V1.4.4
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F4-Nucleo_BSP_User_Manual.chm file
  • -
  • Add use of UNUSED(data) in LCD_IO_WriteMultipleData() to fix “Unused variable†warning with SW4STM32
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c -
      -
    • Add SD_IO_CSSState(), SD_IO_WriteReadData() and SD_IO_WriteReadData() APIs for proper support of the Adafruit shield V2.0.1
    • -
    • Add new API for Button, LED and Joystick deinitialization: BSP_PB_DeInit(), BSP_LED_DeInit(), BSP_JOY_DeInit()
    • -
    • Replace static APIs SPIx_Read(), SD_IO_ReadByte(), SD_IO_WriteCmd(), SD_IO_WaitResponse() and SD_IO_WriteDummy() by SD_IO_WriteReadData() API.
    • -
  • -
  • stm32f4xx_nucleo.h -
      -
    • Add new define “ADAFRUIT_TFT_JOY_SD_ID802†for the Adafruit TFT shield support.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.h -
      -
    • Add alias to BUTTON_USER for backward compatibility.
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c/.h -
      -
    • Align to STM32F4xx HAL Driver V1.3.0 for __HAL_RCC_PPP_CLK_ENABLE() .
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c -
      -
    • Add LCD_IO_WriteMultipleData() LCD IO function, needed for ST7735 BSP component driver.
    • -
  • -
  • Note: This driver version V1.2.0 needs ST7735 BSP component driver V1.1.0 and later.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c -
      -
    • BSP_BP_Init(): Fix limitation on button pin configuration (change EXTI polarity from rising to falling)
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • stm32f4xx_nucleo.c/.h -
      -
    • Update driver to support LCD, joystick and microSD available on Adafruit 1.8" shield (reference ID 802) by adding the SPI and ADC IO link operations
    • -
    • Enhance BSP_PB_Init() function by removing the call of __SYSCFG_CLK_ENABLE() already enabled in the HAL_GPIO_Init()
    • -
    • Correct BSP_LED_Off() and BSP_LED_On() by inverting GPIO_PIN_RESET/ GPIO_PIN_SET values written on GPIO pins
    • -
    • Comments clean up and typo corrections
    • -
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/favicon.png b/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F4xx-Nucleo/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.c b/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.c deleted file mode 100644 index 8f4218588b..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.c +++ /dev/null @@ -1,844 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_nucleo.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage: - * - LEDs and push-button available on STM32F4XX-Nucleo Kit - * from STMicroelectronics - * - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD - * shield (reference ID 802) - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_nucleo.h" - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO STM32F4XX NUCLEO - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL STM32F4XX NUCLEO LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F4xx-Nucleo Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Private_TypesDefinitions STM32F4XX NUCLEO LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Private_Defines STM32F4XX NUCLEO LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32F4xx NUCLEO BSP Driver version number V1.2.9 - */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_SUB2 (0x09) /*!< [15:8] sub2 version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F4xx_NUCLEO_BSP_VERSION ((__STM32F4xx_NUCLEO_BSP_VERSION_MAIN << 24)\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_RC)) - -/** - * @brief LINK SD Card - */ -#define SD_DUMMY_BYTE 0xFF -#define SD_NO_RESPONSE_EXPECTED 0x80 - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Private_Macros STM32F4XX NUCLEO LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Private_Variables STM32F4XX NUCLEO LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED2_GPIO_PORT}; - -const uint16_t GPIO_PIN[LEDn] = {LED2_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {KEY_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {KEY_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {KEY_BUTTON_EXTI_IRQn}; - -/** - * @brief BUS variables - */ - -#ifdef ADAFRUIT_TFT_JOY_SD_ID802 -#ifdef HAL_SPI_MODULE_ENABLED -uint32_t SpixTimeout = NUCLEO_SPIx_TIMEOUT_MAX; /*SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE) - { - } - /* Need to invert bytes for LCD*/ - *((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *(pData+1); - - while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE) - { - } - *((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *pData; - counter--; - pData += 2; - } - - /* Wait until the bus is ready before releasing Chip select */ - while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_BSY) != RESET) - { - } - } - - /* Empty the Rx fifo */ - data = *(&hnucleo_Spi.Instance->DR); - UNUSED(data); - - /* Deselect : Chip Select high */ - LCD_CS_HIGH(); -} - -/** - * @brief Wait for loop in ms. - * @param Delay in ms. - */ -void LCD_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} -#endif /* HAL_SPI_MODULE_ENABLED */ - -/******************************* ADC driver ********************************/ -#ifdef HAL_ADC_MODULE_ENABLED - -/** - * @brief Initializes ADC MSP. - */ -static void ADCx_MspInit(ADC_HandleTypeDef *hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - NUCLEO_ADCx_GPIO_CLK_ENABLE(); - - /* Configure the selected ADC Channel as analog input */ - GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(NUCLEO_ADCx_GPIO_PORT, &GPIO_InitStruct); - - /*** Configure the ADC peripheral ***/ - /* Enable ADC clock */ - NUCLEO_ADCx_CLK_ENABLE(); -} - -/** - * @brief DeInitializes ADC MSP. - * @note ADC DeInit does not disable the GPIO clock - */ -static void ADCx_MspDeInit(ADC_HandleTypeDef *hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** DeInit the ADC peripheral ***/ - /* Disable ADC clock */ - NUCLEO_ADCx_CLK_DISABLE(); - - /* Configure the selected ADC Channel as analog input */ - GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ; - HAL_GPIO_DeInit(NUCLEO_ADCx_GPIO_PORT, GPIO_InitStruct.Pin); - - /* Disable GPIO clock has to be done by the application*/ - /* NUCLEO_ADCx_GPIO_CLK_DISABLE(); */ -} - -/** - * @brief Initializes ADC HAL. - */ -static void ADCx_Init(void) -{ - if(HAL_ADC_GetState(&hnucleo_Adc) == HAL_ADC_STATE_RESET) - { - /* ADC Config */ - hnucleo_Adc.Instance = NUCLEO_ADCx; - hnucleo_Adc.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; /* (must not exceed 36MHz) */ - hnucleo_Adc.Init.Resolution = ADC_RESOLUTION12b; - hnucleo_Adc.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hnucleo_Adc.Init.ContinuousConvMode = DISABLE; - hnucleo_Adc.Init.DiscontinuousConvMode = DISABLE; - hnucleo_Adc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hnucleo_Adc.Init.EOCSelection = EOC_SINGLE_CONV; - hnucleo_Adc.Init.NbrOfConversion = 1; - hnucleo_Adc.Init.DMAContinuousRequests = DISABLE; - - ADCx_MspInit(&hnucleo_Adc); - HAL_ADC_Init(&hnucleo_Adc); - } -} - -/** - * @brief Initializes ADC HAL. - */ -static void ADCx_DeInit(void) -{ - hnucleo_Adc.Instance = NUCLEO_ADCx; - - HAL_ADC_DeInit(&hnucleo_Adc); - ADCx_MspDeInit(&hnucleo_Adc); -} - -/******************************* LINK JOYSTICK ********************************/ - -/** - * @brief Configures joystick available on adafruit 1.8" TFT shield - * managed through ADC to detect motion. - * @retval Joystickstatus (0=> success, 1=> fail) - */ -uint8_t BSP_JOY_Init(void) -{ - uint8_t status = HAL_ERROR; - - ADCx_Init(); - - /* Select the ADC Channel to be converted */ - sConfig.Channel = NUCLEO_ADCx_CHANNEL; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - sConfig.Rank = 1; - status = HAL_ADC_ConfigChannel(&hnucleo_Adc, &sConfig); - - /* Return Joystick initialization status */ - return status; -} - -/** - * @brief DeInit joystick GPIOs. - * @note JOY DeInit does not disable the Mfx, just set the Mfx pins in Off mode. - */ -void BSP_JOY_DeInit(void) -{ - ADCx_DeInit(); -} - -/** - * @brief Returns the Joystick key pressed. - * @note To know which Joystick key is pressed we need to detect the voltage - * level on each key output - * - None : 3.3 V / 4095 - * - SEL : 1.055 V / 1308 - * - DOWN : 0.71 V / 88 - * - LEFT : 3.0 V / 3720 - * - RIGHT : 0.595 V / 737 - * - UP : 1.65 V / 2046 - * @retval JOYState_TypeDef: Code of the Joystick key pressed. - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - JOYState_TypeDef state; - uint16_t keyconvertedvalue = 0; - - /* Start the conversion process */ - HAL_ADC_Start(&hnucleo_Adc); - - /* Wait for the end of conversion */ - HAL_ADC_PollForConversion(&hnucleo_Adc, 10); - - /* Check if the continuous conversion of regular channel is finished */ - if(((HAL_ADC_GetState(&hnucleo_Adc) & HAL_ADC_STATE_EOC_REG) == HAL_ADC_STATE_EOC_REG)) - { - /* Get the converted value of regular channel */ - keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc); - } - - if((keyconvertedvalue > 2010) && (keyconvertedvalue < 2090)) - { - state = JOY_UP; - } - else if((keyconvertedvalue > 680) && (keyconvertedvalue < 780)) - { - state = JOY_RIGHT; - } - else if((keyconvertedvalue > 1270) && (keyconvertedvalue < 1350)) - { - state = JOY_SEL; - } - else if((keyconvertedvalue > 50) && (keyconvertedvalue < 130)) - { - state = JOY_DOWN; - } - else if((keyconvertedvalue > 3680) && (keyconvertedvalue < 3760)) - { - state = JOY_LEFT; - } - else - { - state = JOY_NONE; - } - - /* Loop while a key is pressed */ - if(state != JOY_NONE) - { - keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc); - } - /* Return the code of the Joystick key pressed */ - return state; -} -#endif /* HAL_ADC_MODULE_ENABLED */ - -#endif /* ADAFRUIT_TFT_JOY_SD_ID802 */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.h b/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.h deleted file mode 100644 index 045bdebd31..0000000000 --- a/Drivers/BSP/STM32F4xx-Nucleo/stm32f4xx_nucleo.h +++ /dev/null @@ -1,283 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_nucleo.h - * @author MCD Application Team - * @brief This file contains definitions for: - * - LEDs and push-button available on STM32F4XX-Nucleo Kit - * from STMicroelectronics - * - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD - * shield (reference ID 802) - ****************************************************************************** - * @attention - * - * Copyright (c) 2017 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4XX_NUCLEO_H -#define __STM32F4XX_NUCLEO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/* To be defined only if the board is provided with the related shield */ -/* https://www.adafruit.com/products/802 */ -#define ADAFRUIT_TFT_JOY_SD_ID802 - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4XX_NUCLEO - * @{ - */ - -/** @addtogroup STM32F4XX_NUCLEO_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Exported_Types STM32F4XX NUCLEO LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED2 = 0 -}Led_TypeDef; - -typedef enum -{ - BUTTON_USER = 0, - /* Alias */ - BUTTON_KEY = BUTTON_USER -} Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 -}JOYState_TypeDef; - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Exported_Constants STM32F4XX NUCLEO LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F4XX_NUCLEO board - */ -#if !defined (USE_STM32F4XX_NUCLEO) - #define USE_STM32F4XX_NUCLEO -#endif - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_LED STM32F4XX NUCLEO LOW LEVEL LED - * @{ - */ -#define LEDn 1 - -#define LED2_PIN GPIO_PIN_5 -#define LED2_GPIO_PORT GPIOA -#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) LED2_GPIO_CLK_ENABLE() -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) LED2_GPIO_CLK_DISABLE() -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_BUTTON STM32F4XX NUCLEO LOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Key push-button - */ -#define USER_BUTTON_PIN GPIO_PIN_13 -#define USER_BUTTON_GPIO_PORT GPIOC -#define USER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define USER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define USER_BUTTON_EXTI_LINE GPIO_PIN_13 -#define USER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) USER_BUTTON_GPIO_CLK_ENABLE() -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) USER_BUTTON_GPIO_CLK_DISABLE() - -/* Aliases */ -#define KEY_BUTTON_PIN USER_BUTTON_PIN -#define KEY_BUTTON_GPIO_PORT USER_BUTTON_GPIO_PORT -#define KEY_BUTTON_GPIO_CLK_ENABLE() USER_BUTTON_GPIO_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() USER_BUTTON_GPIO_CLK_DISABLE() -#define KEY_BUTTON_EXTI_LINE USER_BUTTON_EXTI_LINE -#define KEY_BUTTON_EXTI_IRQn USER_BUTTON_EXTI_IRQn - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_BUS STM32F4XX NUCLEO LOW LEVEL BUS - * @{ - */ -/*############################### SPI1 #######################################*/ -#ifdef HAL_SPI_MODULE_ENABLED - -#define NUCLEO_SPIx SPI1 -#define NUCLEO_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() - -#define NUCLEO_SPIx_SCK_AF GPIO_AF5_SPI1 -#define NUCLEO_SPIx_SCK_GPIO_PORT GPIOA -#define NUCLEO_SPIx_SCK_PIN GPIO_PIN_5 -#define NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define NUCLEO_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() - -#define NUCLEO_SPIx_MISO_MOSI_AF GPIO_AF5_SPI1 -#define NUCLEO_SPIx_MISO_MOSI_GPIO_PORT GPIOA -#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define NUCLEO_SPIx_MISO_PIN GPIO_PIN_6 -#define NUCLEO_SPIx_MOSI_PIN GPIO_PIN_7 -/* Maximum Timeout values for flags waiting loops. These timeouts are not based - on accurate values, they just guarantee that the application will not remain - stuck if the SPI communication is corrupted. - You may modify these timeout values depending on CPU frequency and application - conditions (interrupts routines ...). */ -#define NUCLEO_SPIx_TIMEOUT_MAX 1000 - -/** - * @brief SD Control Lines management - */ -#define SD_CS_LOW() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_RESET) -#define SD_CS_HIGH() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_SET) - -/** - * @brief LCD Control Lines management - */ -#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_RESET) -#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_SET) -#define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_RESET) -#define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_SET) - -/** - * @brief SD Control Interface pins (shield D4) - */ -#define SD_CS_PIN GPIO_PIN_5 -#define SD_CS_GPIO_PORT GPIOB -#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -/** - * @brief LCD Control Interface pins (shield D10) - */ -#define LCD_CS_PIN GPIO_PIN_6 -#define LCD_CS_GPIO_PORT GPIOB -#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -/** - * @brief LCD Data/Command Interface pins (shield D8) - */ -#define LCD_DC_PIN GPIO_PIN_9 -#define LCD_DC_GPIO_PORT GPIOA -#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() - -#endif /* HAL_SPI_MODULE_ENABLED */ - -/*################################ ADC1 ######################################*/ -/** - * @brief ADC Interface pins - * used to detect motion of Joystick available on Adafruit 1.8" TFT shield - */ - -#ifdef HAL_ADC_MODULE_ENABLED - -#define NUCLEO_ADCx ADC1 -#define NUCLEO_ADCx_CLK_ENABLE() __HAL_RCC_ADC1_CLK_ENABLE() -#define NUCLEO_ADCx_CLK_DISABLE() __HAL_RCC_ADC1_CLK_DISABLE() - -#define NUCLEO_ADCx_CHANNEL ADC_CHANNEL_8 - -#define NUCLEO_ADCx_GPIO_PORT GPIOB -#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_0 -#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#endif /* HAL_ADC_MODULE_ENABLED */ -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Exported_Macros STM32F4XX NUCLEO LOW LEVEL Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_LOW_LEVEL_Exported_Functions STM32F4XX NUCLEO LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -#ifdef HAL_ADC_MODULE_ENABLED -uint8_t BSP_JOY_Init(void); -JOYState_TypeDef BSP_JOY_GetState(void); -void BSP_JOY_DeInit(void); -#endif /* HAL_ADC_MODULE_ENABLED */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4XX_NUCLEO_H */ diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144 b/Drivers/BSP/STM32F4xx_Nucleo_144 new file mode 160000 index 0000000000..1daff230cd --- /dev/null +++ b/Drivers/BSP/STM32F4xx_Nucleo_144 @@ -0,0 +1 @@ +Subproject commit 1daff230cd72b9860df011c25d815e399af6d117 diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/LICENSE.md b/Drivers/BSP/STM32F4xx_Nucleo_144/LICENSE.md deleted file mode 100644 index 479c4f6826..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/LICENSE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2017 STMicroelectronics. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors -may be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/README.md b/Drivers/BSP/STM32F4xx_Nucleo_144/README.md deleted file mode 100644 index a830f5690e..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# BSP STM32F4XX-NUCLEO-144 Component - -![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/stm32f4xx-nucleo-144.svg?color=brightgreen) - -## Overview - -**STM32Cube** is an STMicroelectronics original initiative to ease developers' life by reducing efforts, time and cost. - -**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. - * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. - * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. - * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. - * A consistent set of middleware libraries such as RTOS, USB, FatFS, graphics, touch sensing library... - * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. - -Two models of publication are proposed for the STM32Cube embedded software: - * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). - * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. - -## Description - -This **stm32f4xx-nucleo-144** MCU component repository is one element of the **STM32CubeF4** MCU embedded software package, providing the **STM32F4XX-NUCLEO-144** BSP BOARD component part. - -## Release note - -Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/stm32f4xx-nucleo-144/blob/main/Release_Notes.html). - -## Compatibility information - -Below is the list of the BSP *component* drivers to be used with this BSP *board* driver. It is **crucial** that you use a consistent set of CMSIS - HAL - BSP versions, as mentioned in [this](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Release_Notes.html) release note. - -* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) - -## Troubleshooting - -Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/Release_Notes.html b/Drivers/BSP/STM32F4xx_Nucleo_144/Release_Notes.html deleted file mode 100644 index a0eabc56b0..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/Release_Notes.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - Release Notes for STM32F4xx_Nucleo_144 Board Drivers - - - - - - -
-
-
-

Release Notes for

-

STM32F4xx_Nucleo_144 Board Drivers

-

Copyright © 2016 STMicroelectronics
-

- -
-

Purpose

-

This directory contains the board drivers to demonstrate the capabilities of the STM32F4xx_Nucleo_144 Board Drivers.

-
-
-

Update History

-
- -
-

Main Changes

-
    -
  • Update Release_Notes.html to support new format
  • -
-
-
-
- -
-

Main Changes

-
    -
  • All source files: update disclaimer to add reference to the new license agreement
  • -
-
-
-
- -
-

Main Changes

-
    -
  • Add general description of BSP drivers
  • -
  • Remove date & version
  • -
-
-
-
- -
-

Main Changes

-
    -
  • BSP_JOY_GetState() API: update the check condition for the ADC continuous conversion of regular channel.
  • -
-
-
-
- -
-

Main Changes

-
    -
  • General updates to fix doxygen errors
  • -
  • Add STM32F4-Nucleo_144_BSP_User_Manual.chm file
  • -
-
-
-
- -
-

Main Changes

-
    -
  • First official release
  • -
-
-
-
-
- - - diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/favicon.png b/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/favicon.png deleted file mode 100644 index 06713eec49..0000000000 Binary files a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/favicon.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/mini-st_2020.css b/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/mini-st_2020.css deleted file mode 100644 index 986f4d4205..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/mini-st_2020.css +++ /dev/null @@ -1,1711 +0,0 @@ -@charset "UTF-8"; -/* - Flavor name: Custom (mini-custom) - Generated online - https://minicss.org/flavors - mini.css version: v3.0.1 -*/ -/* - Browsers resets and base typography. -*/ -/* Core module CSS variable definitions */ -:root { - --fore-color: #03234b; - --secondary-fore-color: #03234b; - --back-color: #ffffff; - --secondary-back-color: #ffffff; - --blockquote-color: #e6007e; - --pre-color: #e6007e; - --border-color: #3cb4e6; - --secondary-border-color: #3cb4e6; - --heading-ratio: 1.2; - --universal-margin: 0.5rem; - --universal-padding: 0.25rem; - --universal-border-radius: 0.075rem; - --background-margin: 1.5%; - --a-link-color: #3cb4e6; - --a-visited-color: #8c0078; } - -html { - font-size: 13.5px; } - -a, b, del, em, i, ins, q, span, strong, u { - font-size: 1em; } - -html, * { - font-family: -apple-system, BlinkMacSystemFont, Helvetica, arial, sans-serif; - line-height: 1.25; - -webkit-text-size-adjust: 100%; } - -* { - font-size: 1rem; } - -body { - margin: 0; - color: var(--fore-color); - @background: var(--back-color); - background: var(--back-color) linear-gradient(#ffd200, #ffd200) repeat-y left top; - background-size: var(--background-margin); - } - -details { - display: block; } - -summary { - display: list-item; } - -abbr[title] { - border-bottom: none; - text-decoration: underline dotted; } - -input { - overflow: visible; } - -img { - max-width: 100%; - height: auto; } - -h1, h2, h3, h4, h5, h6 { - line-height: 1.25; - margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); - font-weight: 400; } - h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { - color: var(--secondary-fore-color); - display: block; - margin-top: -0.25rem; } - -h1 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } - -h2 { - font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) ); - border-style: none none solid none ; - border-width: thin; - border-color: var(--border-color); } -h3 { - font-size: calc(1rem * var(--heading-ratio) ); } - -h4 { - font-size: calc(1rem * var(--heading-ratio)); } - -h5 { - font-size: 1rem; } - -h6 { - font-size: calc(1rem / var(--heading-ratio)); } - -p { - margin: var(--universal-margin); } - -ol, ul { - margin: var(--universal-margin); - padding-left: calc(3 * var(--universal-margin)); } - -b, strong { - font-weight: 700; } - -hr { - box-sizing: content-box; - border: 0; - line-height: 1.25em; - margin: var(--universal-margin); - height: 0.0714285714rem; - background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } - -blockquote { - display: block; - position: relative; - font-style: italic; - color: var(--secondary-fore-color); - margin: var(--universal-margin); - padding: calc(3 * var(--universal-padding)); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.3rem solid var(--blockquote-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - blockquote:before { - position: absolute; - top: calc(0rem - var(--universal-padding)); - left: 0; - font-family: sans-serif; - font-size: 2rem; - font-weight: 800; - content: "\201c"; - color: var(--blockquote-color); } - blockquote[cite]:after { - font-style: normal; - font-size: 0.75em; - font-weight: 700; - content: "\a— " attr(cite); - white-space: pre; } - -code, kbd, pre, samp { - font-family: Menlo, Consolas, monospace; - font-size: 0.85em; } - -code { - background: var(--secondary-back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -kbd { - background: var(--fore-color); - color: var(--back-color); - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } - -pre { - overflow: auto; - background: var(--secondary-back-color); - padding: calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - border: 0.0714285714rem solid var(--secondary-border-color); - border-left: 0.2857142857rem solid var(--pre-color); - border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } - -sup, sub, code, kbd { - line-height: 0; - position: relative; - vertical-align: baseline; } - -small, sup, sub, figcaption { - font-size: 0.75em; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -figure { - margin: var(--universal-margin); } - -figcaption { - color: var(--secondary-fore-color); } - -a { - text-decoration: none; } - a:link { - color: var(--a-link-color); } - a:visited { - color: var(--a-visited-color); } - a:hover, a:focus { - text-decoration: underline; } - -/* - Definitions for the grid system, cards and containers. -*/ -.container { - margin: 0 auto; - padding: 0 calc(1.5 * var(--universal-padding)); } - -.row { - box-sizing: border-box; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - margin: 0 0 0 var(--background-margin); } - -.col-sm, -[class^='col-sm-'], -[class^='col-sm-offset-'], -.row[class*='cols-sm-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - -.col-sm, -.row.cols-sm > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - -.col-sm-1, -.row.cols-sm-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - -.col-sm-offset-0 { - margin-left: 0; } - -.col-sm-2, -.row.cols-sm-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - -.col-sm-offset-1 { - margin-left: 8.3333333333%; } - -.col-sm-3, -.row.cols-sm-3 > * { - max-width: 25%; - flex-basis: 25%; } - -.col-sm-offset-2 { - margin-left: 16.6666666667%; } - -.col-sm-4, -.row.cols-sm-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - -.col-sm-offset-3 { - margin-left: 25%; } - -.col-sm-5, -.row.cols-sm-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - -.col-sm-offset-4 { - margin-left: 33.3333333333%; } - -.col-sm-6, -.row.cols-sm-6 > * { - max-width: 50%; - flex-basis: 50%; } - -.col-sm-offset-5 { - margin-left: 41.6666666667%; } - -.col-sm-7, -.row.cols-sm-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - -.col-sm-offset-6 { - margin-left: 50%; } - -.col-sm-8, -.row.cols-sm-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - -.col-sm-offset-7 { - margin-left: 58.3333333333%; } - -.col-sm-9, -.row.cols-sm-9 > * { - max-width: 75%; - flex-basis: 75%; } - -.col-sm-offset-8 { - margin-left: 66.6666666667%; } - -.col-sm-10, -.row.cols-sm-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - -.col-sm-offset-9 { - margin-left: 75%; } - -.col-sm-11, -.row.cols-sm-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - -.col-sm-offset-10 { - margin-left: 83.3333333333%; } - -.col-sm-12, -.row.cols-sm-12 > * { - max-width: 100%; - flex-basis: 100%; } - -.col-sm-offset-11 { - margin-left: 91.6666666667%; } - -.col-sm-normal { - order: initial; } - -.col-sm-first { - order: -999; } - -.col-sm-last { - order: 999; } - -@media screen and (min-width: 500px) { - .col-md, - [class^='col-md-'], - [class^='col-md-offset-'], - .row[class*='cols-md-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-md, - .row.cols-md > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-md-1, - .row.cols-md-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-md-offset-0 { - margin-left: 0; } - - .col-md-2, - .row.cols-md-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-md-offset-1 { - margin-left: 8.3333333333%; } - - .col-md-3, - .row.cols-md-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-md-offset-2 { - margin-left: 16.6666666667%; } - - .col-md-4, - .row.cols-md-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-md-offset-3 { - margin-left: 25%; } - - .col-md-5, - .row.cols-md-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-md-offset-4 { - margin-left: 33.3333333333%; } - - .col-md-6, - .row.cols-md-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-md-offset-5 { - margin-left: 41.6666666667%; } - - .col-md-7, - .row.cols-md-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-md-offset-6 { - margin-left: 50%; } - - .col-md-8, - .row.cols-md-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-md-offset-7 { - margin-left: 58.3333333333%; } - - .col-md-9, - .row.cols-md-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-md-offset-8 { - margin-left: 66.6666666667%; } - - .col-md-10, - .row.cols-md-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-md-offset-9 { - margin-left: 75%; } - - .col-md-11, - .row.cols-md-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-md-offset-10 { - margin-left: 83.3333333333%; } - - .col-md-12, - .row.cols-md-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-md-offset-11 { - margin-left: 91.6666666667%; } - - .col-md-normal { - order: initial; } - - .col-md-first { - order: -999; } - - .col-md-last { - order: 999; } } -@media screen and (min-width: 1280px) { - .col-lg, - [class^='col-lg-'], - [class^='col-lg-offset-'], - .row[class*='cols-lg-'] > * { - box-sizing: border-box; - flex: 0 0 auto; - padding: 0 calc(var(--universal-padding) / 2); } - - .col-lg, - .row.cols-lg > * { - max-width: 100%; - flex-grow: 1; - flex-basis: 0; } - - .col-lg-1, - .row.cols-lg-1 > * { - max-width: 8.3333333333%; - flex-basis: 8.3333333333%; } - - .col-lg-offset-0 { - margin-left: 0; } - - .col-lg-2, - .row.cols-lg-2 > * { - max-width: 16.6666666667%; - flex-basis: 16.6666666667%; } - - .col-lg-offset-1 { - margin-left: 8.3333333333%; } - - .col-lg-3, - .row.cols-lg-3 > * { - max-width: 25%; - flex-basis: 25%; } - - .col-lg-offset-2 { - margin-left: 16.6666666667%; } - - .col-lg-4, - .row.cols-lg-4 > * { - max-width: 33.3333333333%; - flex-basis: 33.3333333333%; } - - .col-lg-offset-3 { - margin-left: 25%; } - - .col-lg-5, - .row.cols-lg-5 > * { - max-width: 41.6666666667%; - flex-basis: 41.6666666667%; } - - .col-lg-offset-4 { - margin-left: 33.3333333333%; } - - .col-lg-6, - .row.cols-lg-6 > * { - max-width: 50%; - flex-basis: 50%; } - - .col-lg-offset-5 { - margin-left: 41.6666666667%; } - - .col-lg-7, - .row.cols-lg-7 > * { - max-width: 58.3333333333%; - flex-basis: 58.3333333333%; } - - .col-lg-offset-6 { - margin-left: 50%; } - - .col-lg-8, - .row.cols-lg-8 > * { - max-width: 66.6666666667%; - flex-basis: 66.6666666667%; } - - .col-lg-offset-7 { - margin-left: 58.3333333333%; } - - .col-lg-9, - .row.cols-lg-9 > * { - max-width: 75%; - flex-basis: 75%; } - - .col-lg-offset-8 { - margin-left: 66.6666666667%; } - - .col-lg-10, - .row.cols-lg-10 > * { - max-width: 83.3333333333%; - flex-basis: 83.3333333333%; } - - .col-lg-offset-9 { - margin-left: 75%; } - - .col-lg-11, - .row.cols-lg-11 > * { - max-width: 91.6666666667%; - flex-basis: 91.6666666667%; } - - .col-lg-offset-10 { - margin-left: 83.3333333333%; } - - .col-lg-12, - .row.cols-lg-12 > * { - max-width: 100%; - flex-basis: 100%; } - - .col-lg-offset-11 { - margin-left: 91.6666666667%; } - - .col-lg-normal { - order: initial; } - - .col-lg-first { - order: -999; } - - .col-lg-last { - order: 999; } } -/* Card component CSS variable definitions */ -:root { - --card-back-color: #3cb4e6; - --card-fore-color: #03234b; - --card-border-color: #03234b; } - -.card { - display: flex; - flex-direction: column; - justify-content: space-between; - align-self: center; - position: relative; - width: 100%; - background: var(--card-back-color); - color: var(--card-fore-color); - border: 0.0714285714rem solid var(--card-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - overflow: hidden; } - @media screen and (min-width: 320px) { - .card { - max-width: 320px; } } - .card > .sectione { - background: var(--card-back-color); - color: var(--card-fore-color); - box-sizing: border-box; - margin: 0; - border: 0; - border-radius: 0; - border-bottom: 0.0714285714rem solid var(--card-border-color); - padding: var(--universal-padding); - width: 100%; } - .card > .sectione.media { - height: 200px; - padding: 0; - -o-object-fit: cover; - object-fit: cover; } - .card > .sectione:last-child { - border-bottom: 0; } - -/* - Custom elements for card elements. -*/ -@media screen and (min-width: 240px) { - .card.small { - max-width: 240px; } } -@media screen and (min-width: 480px) { - .card.large { - max-width: 480px; } } -.card.fluid { - max-width: 100%; - width: auto; } - -.card.warning { - --card-back-color: #e5b8b7; - --card-fore-color: #3b234b; - --card-border-color: #8c0078; } - -.card.error { - --card-back-color: #464650; - --card-fore-color: #ffffff; - --card-border-color: #8c0078; } - -.card > .sectione.dark { - --card-back-color: #3b234b; - --card-fore-color: #ffffff; } - -.card > .sectione.double-padded { - padding: calc(1.5 * var(--universal-padding)); } - -/* - Definitions for forms and input elements. -*/ -/* Input_control module CSS variable definitions */ -:root { - --form-back-color: #ffe97f; - --form-fore-color: #03234b; - --form-border-color: #3cb4e6; - --input-back-color: #ffffff; - --input-fore-color: #03234b; - --input-border-color: #3cb4e6; - --input-focus-color: #0288d1; - --input-invalid-color: #d32f2f; - --button-back-color: #e2e2e2; - --button-hover-back-color: #dcdcdc; - --button-fore-color: #212121; - --button-border-color: transparent; - --button-hover-border-color: transparent; - --button-group-border-color: rgba(124, 124, 124, 0.54); } - -form { - background: var(--form-back-color); - color: var(--form-fore-color); - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); } - -fieldset { - border: 0.0714285714rem solid var(--form-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 4); - padding: var(--universal-padding); } - -legend { - box-sizing: border-box; - display: table; - max-width: 100%; - white-space: normal; - font-weight: 500; - padding: calc(var(--universal-padding) / 2); } - -label { - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -.input-group { - display: inline-block; } - .input-group.fluid { - display: flex; - align-items: center; - justify-content: center; } - .input-group.fluid > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - @media screen and (max-width: 499px) { - .input-group.fluid { - align-items: stretch; - flex-direction: column; } } - .input-group.vertical { - display: flex; - align-items: stretch; - flex-direction: column; } - .input-group.vertical > input { - max-width: 100%; - flex-grow: 1; - flex-basis: 0px; } - -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } - -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; } - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], -[type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { - box-sizing: border-box; - background: var(--input-back-color); - color: var(--input-fore-color); - border: 0.0714285714rem solid var(--input-border-color); - border-radius: var(--universal-border-radius); - margin: calc(var(--universal-margin) / 2); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - -input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { - border-color: var(--input-focus-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { - border-color: var(--input-invalid-color); - box-shadow: none; } -input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { - background: var(--secondary-back-color); } - -select { - max-width: 100%; } - -option { - overflow: hidden; - text-overflow: ellipsis; } - -[type="checkbox"], [type="radio"] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - position: relative; - height: calc(1rem + var(--universal-padding) / 2); - width: calc(1rem + var(--universal-padding) / 2); - vertical-align: text-bottom; - padding: 0; - flex-basis: calc(1rem + var(--universal-padding) / 2) !important; - flex-grow: 0 !important; } - [type="checkbox"]:checked:before, [type="radio"]:checked:before { - position: absolute; } - -[type="checkbox"]:checked:before { - content: '\2713'; - font-family: sans-serif; - font-size: calc(1rem + var(--universal-padding) / 2); - top: calc(0rem - var(--universal-padding)); - left: calc(var(--universal-padding) / 4); } - -[type="radio"] { - border-radius: 100%; } - [type="radio"]:checked:before { - border-radius: 100%; - content: ''; - top: calc(0.0714285714rem + var(--universal-padding) / 2); - left: calc(0.0714285714rem + var(--universal-padding) / 2); - background: var(--input-fore-color); - width: 0.5rem; - height: 0.5rem; } - -:placeholder-shown { - color: var(--input-fore-color); } - -::-ms-placeholder { - color: var(--input-fore-color); - opacity: 0.54; } - -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; } - -button, html [type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } - -button { - overflow: visible; - text-transform: none; } - -button, [type="button"], [type="submit"], [type="reset"], -a.button, label.button, .button, -a[role="button"], label[role="button"], [role="button"] { - display: inline-block; - background: var(--button-back-color); - color: var(--button-fore-color); - border: 0.0714285714rem solid var(--button-border-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); - margin: var(--universal-margin); - text-decoration: none; - cursor: pointer; - transition: background 0.3s; } - button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, - a.button:hover, - a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, - a[role="button"]:hover, - a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { - background: var(--button-hover-back-color); - border-color: var(--button-hover-border-color); } - -input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { - cursor: not-allowed; - opacity: 0.75; } - -.button-group { - display: flex; - border: 0.0714285714rem solid var(--button-group-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { - margin: 0; - max-width: 100%; - flex: 1 1 auto; - text-align: center; - border: 0; - border-radius: 0; - box-shadow: none; } - .button-group > :not(:first-child) { - border-left: 0.0714285714rem solid var(--button-group-border-color); } - @media screen and (max-width: 499px) { - .button-group { - flex-direction: column; } - .button-group > :not(:first-child) { - border: 0; - border-top: 0.0714285714rem solid var(--button-group-border-color); } } - -/* - Custom elements for forms and input elements. -*/ -button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { - --button-back-color: #1976d2; - --button-fore-color: #f8f8f8; } - button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { - --button-hover-back-color: #1565c0; } - -button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { - --button-back-color: #d32f2f; - --button-fore-color: #f8f8f8; } - button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { - --button-hover-back-color: #c62828; } - -button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { - --button-back-color: #308732; - --button-fore-color: #f8f8f8; } - button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { - --button-hover-back-color: #277529; } - -button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { - --button-back-color: #212121; - --button-fore-color: #f8f8f8; } - button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { - --button-hover-back-color: #111; } - -button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { - padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); - margin: var(--universal-margin); } - -button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { - padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); - margin: var(--universal-margin); } - -/* - Definitions for navigation elements. -*/ -/* Navigation module CSS variable definitions */ -:root { - --header-back-color: #03234b; - --header-hover-back-color: #ffd200; - --header-fore-color: #ffffff; - --header-border-color: #3cb4e6; - --nav-back-color: #ffffff; - --nav-hover-back-color: #ffe97f; - --nav-fore-color: #e6007e; - --nav-border-color: #3cb4e6; - --nav-link-color: #3cb4e6; - --footer-fore-color: #ffffff; - --footer-back-color: #03234b; - --footer-border-color: #3cb4e6; - --footer-link-color: #3cb4e6; - --drawer-back-color: #ffffff; - --drawer-hover-back-color: #ffe97f; - --drawer-border-color: #3cb4e6; - --drawer-close-color: #e6007e; } - -header { - height: 2.75rem; - background: var(--header-back-color); - color: var(--header-fore-color); - border-bottom: 0.0714285714rem solid var(--header-border-color); - padding: calc(var(--universal-padding) / 4) 0; - white-space: nowrap; - overflow-x: auto; - overflow-y: hidden; } - header.row { - box-sizing: content-box; } - header .logo { - color: var(--header-fore-color); - font-size: 1.75rem; - padding: var(--universal-padding) calc(2 * var(--universal-padding)); - text-decoration: none; } - header button, header [type="button"], header .button, header [role="button"] { - box-sizing: border-box; - position: relative; - top: calc(0rem - var(--universal-padding) / 4); - height: calc(3.1875rem + var(--universal-padding) / 2); - background: var(--header-back-color); - line-height: calc(3.1875rem - var(--universal-padding) * 1.5); - text-align: center; - color: var(--header-fore-color); - border: 0; - border-radius: 0; - margin: 0; - text-transform: uppercase; } - header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { - background: var(--header-hover-back-color); } - -nav { - background: var(--nav-back-color); - color: var(--nav-fore-color); - border: 0.0714285714rem solid var(--nav-border-color); - border-radius: var(--universal-border-radius); - margin: var(--universal-margin); } - nav * { - padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } - nav a, nav a:visited { - display: block; - color: var(--nav-link-color); - border-radius: var(--universal-border-radius); - transition: background 0.3s; } - nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { - text-decoration: none; - background: var(--nav-hover-back-color); } - nav .sublink-1 { - position: relative; - margin-left: calc(2 * var(--universal-padding)); } - nav .sublink-1:before { - position: absolute; - left: calc(var(--universal-padding) - 1 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - nav .sublink-2 { - position: relative; - margin-left: calc(4 * var(--universal-padding)); } - nav .sublink-2:before { - position: absolute; - left: calc(var(--universal-padding) - 3 * var(--universal-padding)); - top: -0.0714285714rem; - content: ''; - height: 100%; - border: 0.0714285714rem solid var(--nav-border-color); - border-left: 0; } - -footer { - background: var(--footer-back-color); - color: var(--footer-fore-color); - border-top: 0.0714285714rem solid var(--footer-border-color); - padding: calc(2 * var(--universal-padding)) var(--universal-padding); - font-size: 0.875rem; } - footer a, footer a:visited { - color: var(--footer-link-color); } - -header.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - top: 0; } - -footer.sticky { - position: -webkit-sticky; - position: sticky; - z-index: 1101; - bottom: 0; } - -.drawer-toggle:before { - display: inline-block; - position: relative; - vertical-align: bottom; - content: '\00a0\2261\00a0'; - font-family: sans-serif; - font-size: 1.5em; } -@media screen and (min-width: 500px) { - .drawer-toggle:not(.persistent) { - display: none; } } - -[type="checkbox"].drawer { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].drawer + * { - display: block; - box-sizing: border-box; - position: fixed; - top: 0; - width: 320px; - height: 100vh; - overflow-y: auto; - background: var(--drawer-back-color); - border: 0.0714285714rem solid var(--drawer-border-color); - border-radius: 0; - margin: 0; - z-index: 1110; - right: -320px; - transition: right 0.3s; } - [type="checkbox"].drawer + * .drawer-close { - position: absolute; - top: var(--universal-margin); - right: var(--universal-margin); - z-index: 1111; - width: 2rem; - height: 2rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].drawer + * .drawer-close:before { - display: block; - content: '\00D7'; - color: var(--drawer-close-color); - position: relative; - font-family: sans-serif; - font-size: 2rem; - line-height: 1; - text-align: center; } - [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { - background: var(--drawer-hover-back-color); } - @media screen and (max-width: 320px) { - [type="checkbox"].drawer + * { - width: 100%; } } - [type="checkbox"].drawer:checked + * { - right: 0; } - @media screen and (min-width: 500px) { - [type="checkbox"].drawer:not(.persistent) + * { - position: static; - height: 100%; - z-index: 1100; } - [type="checkbox"].drawer:not(.persistent) + * .drawer-close { - display: none; } } - -/* - Definitions for the responsive table component. -*/ -/* Table module CSS variable definitions. */ -:root { - --table-border-color: #03234b; - --table-border-separator-color: #03234b; - --table-head-back-color: #03234b; - --table-head-fore-color: #ffffff; - --table-body-back-color: #ffffff; - --table-body-fore-color: #03234b; - --table-body-alt-back-color: #f4f4f4; } - -table { - border-collapse: separate; - border-spacing: 0; - margin: 0; - display: flex; - flex: 0 1 auto; - flex-flow: row wrap; - padding: var(--universal-padding); - padding-top: 0; } - table caption { - font-size: 1rem; - margin: calc(2 * var(--universal-margin)) 0; - max-width: 100%; - flex: 0 0 100%; } - table thead, table tbody { - display: flex; - flex-flow: row wrap; - border: 0.0714285714rem solid var(--table-border-color); } - table thead { - z-index: 999; - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; - border-bottom: 0.0714285714rem solid var(--table-border-separator-color); } - table tbody { - border-top: 0; - margin-top: calc(0 - var(--universal-margin)); - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - table tr { - display: flex; - padding: 0; } - table th, table td { - padding: calc(0.5 * var(--universal-padding)); - font-size: 0.9rem; } - table th { - text-align: left; - background: var(--table-head-back-color); - color: var(--table-head-fore-color); } - table td { - background: var(--table-body-back-color); - color: var(--table-body-fore-color); - border-top: 0.0714285714rem solid var(--table-border-color); } - -table:not(.horizontal) { - overflow: auto; - max-height: 100%; } - table:not(.horizontal) thead, table:not(.horizontal) tbody { - max-width: 100%; - flex: 0 0 100%; } - table:not(.horizontal) tr { - flex-flow: row wrap; - flex: 0 0 100%; } - table:not(.horizontal) th, table:not(.horizontal) td { - flex: 1 0 0%; - overflow: hidden; - text-overflow: ellipsis; } - table:not(.horizontal) thead { - position: sticky; - top: 0; } - table:not(.horizontal) tbody tr:first-child td { - border-top: 0; } - -table.horizontal { - border: 0; } - table.horizontal thead, table.horizontal tbody { - border: 0; - flex: .2 0 0; - flex-flow: row nowrap; } - table.horizontal tbody { - overflow: auto; - justify-content: space-between; - flex: .8 0 0; - margin-left: 0; - padding-bottom: calc(var(--universal-padding) / 4); } - table.horizontal tr { - flex-direction: column; - flex: 1 0 auto; } - table.horizontal th, table.horizontal td { - width: auto; - border: 0; - border-bottom: 0.0714285714rem solid var(--table-border-color); } - table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { - border-top: 0; } - table.horizontal th { - text-align: right; - border-left: 0.0714285714rem solid var(--table-border-color); - border-right: 0.0714285714rem solid var(--table-border-separator-color); } - table.horizontal thead tr:first-child { - padding-left: 0; } - table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td { - border-right: 0.0714285714rem solid var(--table-border-color); } - table.horizontal tbody tr:last-child td:first-child { - border-top-right-radius: 0.25rem; } - table.horizontal tbody tr:last-child td:last-child { - border-bottom-right-radius: 0.25rem; } - table.horizontal thead tr:first-child th:first-child { - border-top-left-radius: 0.25rem; } - table.horizontal thead tr:first-child th:last-child { - border-bottom-left-radius: 0.25rem; } - -@media screen and (max-width: 499px) { - table, table.horizontal { - border-collapse: collapse; - border: 0; - width: 100%; - display: table; } - table thead, table th, table.horizontal thead, table.horizontal th { - border: 0; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - table tbody, table.horizontal tbody { - border: 0; - display: table-row-group; } - table tr, table.horizontal tr { - display: block; - border: 0.0714285714rem solid var(--table-border-color); - border-radius: var(--universal-border-radius); - background: #ffffff; - padding: var(--universal-padding); - margin: var(--universal-margin); - margin-bottom: calc(1 * var(--universal-margin)); } - table th, table td, table.horizontal th, table.horizontal td { - width: auto; } - table td, table.horizontal td { - display: block; - border: 0; - text-align: right; } - table td:before, table.horizontal td:before { - content: attr(data-label); - float: left; - font-weight: 600; } - table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { - border-top: 0; } - table tbody tr:last-child td, table.horizontal tbody tr:last-child td { - border-right: 0; } } -table tr:nth-of-type(2n) > td { - background: var(--table-body-alt-back-color); } - -@media screen and (max-width: 500px) { - table tr:nth-of-type(2n) { - background: var(--table-body-alt-back-color); } } -:root { - --table-body-hover-back-color: #90caf9; } - -table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } - -@media screen and (max-width: 500px) { - table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { - background: var(--table-body-hover-back-color); } } -/* - Definitions for contextual background elements, toasts and tooltips. -*/ -/* Contextual module CSS variable definitions */ -:root { - --mark-back-color: #3cb4e6; - --mark-fore-color: #ffffff; } - -mark { - background: var(--mark-back-color); - color: var(--mark-fore-color); - font-size: 0.95em; - line-height: 1em; - border-radius: var(--universal-border-radius); - padding: calc(var(--universal-padding) / 4) var(--universal-padding); } - mark.inline-block { - display: inline-block; - font-size: 1em; - line-height: 1.4; - padding: calc(var(--universal-padding) / 2) var(--universal-padding); } - -:root { - --toast-back-color: #424242; - --toast-fore-color: #fafafa; } - -.toast { - position: fixed; - bottom: calc(var(--universal-margin) * 3); - left: 50%; - transform: translate(-50%, -50%); - z-index: 1111; - color: var(--toast-fore-color); - background: var(--toast-back-color); - border-radius: calc(var(--universal-border-radius) * 16); - padding: var(--universal-padding) calc(var(--universal-padding) * 3); } - -:root { - --tooltip-back-color: #212121; - --tooltip-fore-color: #fafafa; } - -.tooltip { - position: relative; - display: inline-block; } - .tooltip:before, .tooltip:after { - position: absolute; - opacity: 0; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: all 0.3s; - z-index: 1010; - left: 50%; } - .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { - bottom: 75%; } - .tooltip.bottom:before, .tooltip.bottom:after { - top: 75%; } - .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { - opacity: 1; - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); } - .tooltip:before { - content: ''; - background: transparent; - border: var(--universal-margin) solid transparent; - left: calc(50% - var(--universal-margin)); } - .tooltip:not(.bottom):before { - border-top-color: #212121; } - .tooltip.bottom:before { - border-bottom-color: #212121; } - .tooltip:after { - content: attr(aria-label); - color: var(--tooltip-fore-color); - background: var(--tooltip-back-color); - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - white-space: nowrap; - transform: translateX(-50%); } - .tooltip:not(.bottom):after { - margin-bottom: calc(2 * var(--universal-margin)); } - .tooltip.bottom:after { - margin-top: calc(2 * var(--universal-margin)); } - -:root { - --modal-overlay-color: rgba(0, 0, 0, 0.45); - --modal-close-color: #e6007e; - --modal-close-hover-color: #ffe97f; } - -[type="checkbox"].modal { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - [type="checkbox"].modal + div { - position: fixed; - top: 0; - left: 0; - display: none; - width: 100vw; - height: 100vh; - background: var(--modal-overlay-color); } - [type="checkbox"].modal + div .card { - margin: 0 auto; - max-height: 50vh; - overflow: auto; } - [type="checkbox"].modal + div .card .modal-close { - position: absolute; - top: 0; - right: 0; - width: 1.75rem; - height: 1.75rem; - border-radius: var(--universal-border-radius); - padding: var(--universal-padding); - margin: 0; - cursor: pointer; - transition: background 0.3s; } - [type="checkbox"].modal + div .card .modal-close:before { - display: block; - content: '\00D7'; - color: var(--modal-close-color); - position: relative; - font-family: sans-serif; - font-size: 1.75rem; - line-height: 1; - text-align: center; } - [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { - background: var(--modal-close-hover-color); } - [type="checkbox"].modal:checked + div { - display: flex; - flex: 0 1 auto; - z-index: 1200; } - [type="checkbox"].modal:checked + div .card .modal-close { - z-index: 1211; } - -:root { - --collapse-label-back-color: #03234b; - --collapse-label-fore-color: #ffffff; - --collapse-label-hover-back-color: #3cb4e6; - --collapse-selected-label-back-color: #3cb4e6; - --collapse-border-color: var(--collapse-label-back-color); - --collapse-selected-border-color: #ceecf8; - --collapse-content-back-color: #ffffff; - --collapse-selected-label-border-color: #3cb4e6; } - -.collapse { - width: calc(100% - 2 * var(--universal-margin)); - opacity: 1; - display: flex; - flex-direction: column; - margin: var(--universal-margin); - border-radius: var(--universal-border-radius); } - .collapse > [type="radio"], .collapse > [type="checkbox"] { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); } - .collapse > label { - flex-grow: 1; - display: inline-block; - height: 1.25rem; - cursor: pointer; - transition: background 0.2s; - color: var(--collapse-label-fore-color); - background: var(--collapse-label-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - padding: calc(1.25 * var(--universal-padding)); } - .collapse > label:hover, .collapse > label:focus { - background: var(--collapse-label-hover-back-color); } - .collapse > label + div { - flex-basis: auto; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - position: absolute; - clip: rect(0 0 0 0); - -webkit-clip-path: inset(100%); - clip-path: inset(100%); - transition: max-height 0.3s; - max-height: 1px; } - .collapse > :checked + label { - background: var(--collapse-selected-label-back-color); - border-color: var(--collapse-selected-label-border-color); } - .collapse > :checked + label + div { - box-sizing: border-box; - position: relative; - width: 100%; - height: auto; - overflow: auto; - margin: 0; - background: var(--collapse-content-back-color); - border: 0.0714285714rem solid var(--collapse-selected-border-color); - border-top: 0; - padding: var(--universal-padding); - clip: auto; - -webkit-clip-path: inset(0%); - clip-path: inset(0%); - max-height: 100%; } - .collapse > label:not(:first-of-type) { - border-top: 0; } - .collapse > label:first-of-type { - border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } - .collapse > label:last-of-type:not(:first-of-type) { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - .collapse > label:last-of-type:first-of-type { - border-radius: var(--universal-border-radius); } - .collapse > :checked:last-of-type:not(:first-of-type) + label { - border-radius: 0; } - .collapse > :checked:last-of-type + label + div { - border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } - -/* - Custom elements for contextual background elements, toasts and tooltips. -*/ -mark.tertiary { - --mark-back-color: #3cb4e6; } - -mark.tag { - padding: calc(var(--universal-padding)/2) var(--universal-padding); - border-radius: 1em; } - -/* - Definitions for progress elements and spinners. -*/ -/* Progress module CSS variable definitions */ -:root { - --progress-back-color: #3cb4e6; - --progress-fore-color: #555; } - -progress { - display: block; - vertical-align: baseline; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - height: 0.75rem; - width: calc(100% - 2 * var(--universal-margin)); - margin: var(--universal-margin); - border: 0; - border-radius: calc(2 * var(--universal-border-radius)); - background: var(--progress-back-color); - color: var(--progress-fore-color); } - progress::-webkit-progress-value { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress::-webkit-progress-bar { - background: var(--progress-back-color); } - progress::-moz-progress-bar { - background: var(--progress-fore-color); - border-top-left-radius: calc(2 * var(--universal-border-radius)); - border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-webkit-progress-value { - border-radius: calc(2 * var(--universal-border-radius)); } - progress[value="1000"]::-moz-progress-bar { - border-radius: calc(2 * var(--universal-border-radius)); } - progress.inline { - display: inline-block; - vertical-align: middle; - width: 60%; } - -:root { - --spinner-back-color: #ddd; - --spinner-fore-color: #555; } - -@keyframes spinner-donut-anim { - 0% { - transform: rotate(0deg); } - 100% { - transform: rotate(360deg); } } -.spinner { - display: inline-block; - margin: var(--universal-margin); - border: 0.25rem solid var(--spinner-back-color); - border-left: 0.25rem solid var(--spinner-fore-color); - border-radius: 50%; - width: 1.25rem; - height: 1.25rem; - animation: spinner-donut-anim 1.2s linear infinite; } - -/* - Custom elements for progress bars and spinners. -*/ -progress.primary { - --progress-fore-color: #1976d2; } - -progress.secondary { - --progress-fore-color: #d32f2f; } - -progress.tertiary { - --progress-fore-color: #308732; } - -.spinner.primary { - --spinner-fore-color: #1976d2; } - -.spinner.secondary { - --spinner-fore-color: #d32f2f; } - -.spinner.tertiary { - --spinner-fore-color: #308732; } - -/* - Definitions for icons - powered by Feather (https://feathericons.com/). -*/ -span[class^='icon-'] { - display: inline-block; - height: 1em; - width: 1em; - vertical-align: -0.125em; - background-size: contain; - margin: 0 calc(var(--universal-margin) / 4); } - span[class^='icon-'].secondary { - -webkit-filter: invert(25%); - filter: invert(25%); } - span[class^='icon-'].inverse { - -webkit-filter: invert(100%); - filter: invert(100%); } - -span.icon-alert { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-bookmark { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-calendar { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-credit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-edit { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } -span.icon-link { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-help { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-home { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-info { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-lock { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-mail { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } -span.icon-location { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-phone { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-rss { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } -span.icon-search { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-settings { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-share { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-cart { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } -span.icon-upload { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } -span.icon-user { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%2303234b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } - -/* - Definitions for STMicroelectronics icons (https://brandportal.st.com/document/26). -*/ -span.icon-st-update { - background-image: url("Update.svg"); } -span.icon-st-add { - background-image: url("Add button.svg"); } - -/* - Definitions for utilities and helper classes. -*/ -/* Utility module CSS variable definitions */ -:root { - --generic-border-color: rgba(0, 0, 0, 0.3); - --generic-box-shadow: 0 0.2857142857rem 0.2857142857rem 0 rgba(0, 0, 0, 0.125), 0 0.1428571429rem 0.1428571429rem -0.1428571429rem rgba(0, 0, 0, 0.125); } - -.hidden { - display: none !important; } - -.visually-hidden { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } - -.bordered { - border: 0.0714285714rem solid var(--generic-border-color) !important; } - -.rounded { - border-radius: var(--universal-border-radius) !important; } - -.circular { - border-radius: 50% !important; } - -.shadowed { - box-shadow: var(--generic-box-shadow) !important; } - -.responsive-margin { - margin: calc(var(--universal-margin) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-margin { - margin: calc(var(--universal-margin) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-margin { - margin: var(--universal-margin) !important; } } - -.responsive-padding { - padding: calc(var(--universal-padding) / 4) !important; } - @media screen and (min-width: 500px) { - .responsive-padding { - padding: calc(var(--universal-padding) / 2) !important; } } - @media screen and (min-width: 1280px) { - .responsive-padding { - padding: var(--universal-padding) !important; } } - -@media screen and (max-width: 499px) { - .hidden-sm { - display: none !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .hidden-md { - display: none !important; } } -@media screen and (min-width: 1280px) { - .hidden-lg { - display: none !important; } } -@media screen and (max-width: 499px) { - .visually-hidden-sm { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 500px) and (max-width: 1279px) { - .visually-hidden-md { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } -@media screen and (min-width: 1280px) { - .visually-hidden-lg { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: -1px !important; - border: 0 !important; - padding: 0 !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - overflow: hidden !important; } } - -/*# sourceMappingURL=mini-custom.css.map */ - -img[alt="ST logo"] { display: block; margin: auto; width: 75%; max-width: 250px; min-width: 71px; } -img[alt="Cube logo"] { float: right; width: 30%; max-width: 10rem; min-width: 8rem; padding-right: 1rem;} - -.figure { - display: block; - margin-left: auto; - margin-right: auto; - text-align: center; -} \ No newline at end of file diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/st_logo_2020.png b/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/st_logo_2020.png deleted file mode 100644 index d6cebb5ac7..0000000000 Binary files a/Drivers/BSP/STM32F4xx_Nucleo_144/_htmresc/st_logo_2020.png and /dev/null differ diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.c b/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.c deleted file mode 100644 index d8af9a41ee..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.c +++ /dev/null @@ -1,863 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_nucleo_144.c - * @author MCD Application Team - * @brief This file provides set of firmware functions to manage: - * - LEDs and push-button available on STM32F4XX-Nucleo-144 Kit - * from STMicroelectronics - * - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD - * shield (reference ID 802) - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_nucleo_144.h" - - -/** @defgroup BSP BSP - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_144 STM32F4XX NUCLEO 144 - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL STM32F4XX NUCLEO 144 LOW LEVEL - * @brief This file provides set of firmware functions to manage Leds and push-button - * available on STM32F4xx-Nucleo Kit from STMicroelectronics. - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Private_TypesDefinitions STM32F4XX NUCLEO 144 LOW LEVEL Private TypesDefinitions - * @{ - */ -/** - * @} - */ - - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Private_Defines STM32F4XX NUCLEO 144 LOW LEVEL Private Defines - * @{ - */ - -/** - * @brief STM32F4xx NUCLEO BSP Driver version number V1.0.5 - */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */ -#define __STM32F4xx_NUCLEO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F4xx_NUCLEO_BSP_VERSION ((__STM32F4xx_NUCLEO_BSP_VERSION_MAIN << 24)\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_SUB1 << 16)\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32F4xx_NUCLEO_BSP_VERSION_RC)) - -/** - * @brief LINK SD Card - */ -#define SD_DUMMY_BYTE 0xFF -#define SD_NO_RESPONSE_EXPECTED 0x80 - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Private_Macros STM32F4XX NUCLEO 144 LOW LEVEL Private Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Private_Variables STM32F4XX NUCLEO 144 LOW LEVEL Private Variables - * @{ - */ -GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT}; - -const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN}; - -GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {USER_BUTTON_GPIO_PORT}; -const uint16_t BUTTON_PIN[BUTTONn] = {USER_BUTTON_PIN}; -const uint8_t BUTTON_IRQn[BUTTONn] = {USER_BUTTON_EXTI_IRQn}; - -/** - * @brief BUS variables - */ - -#ifdef ADAFRUIT_TFT_JOY_SD_ID802 -#ifdef HAL_SPI_MODULE_ENABLED -uint32_t SpixTimeout = NUCLEO_SPIx_TIMEOUT_MAX; /*SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE) - { - } - /* Need to invert bytes for LCD*/ - *((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *(pData+1); - - while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_TXE) != SPI_FLAG_TXE) - { - } - *((__IO uint8_t*)&hnucleo_Spi.Instance->DR) = *pData; - counter--; - pData += 2; - } - - /* Wait until the bus is ready before releasing Chip select */ - while(((hnucleo_Spi.Instance->SR) & SPI_FLAG_BSY) != RESET) - { - } - } - - /* Empty the Rx fifo */ - data = *(&hnucleo_Spi.Instance->DR); - UNUSED(data); /* Remove GNU warning */ - - /* Deselect : Chip Select high */ - LCD_CS_HIGH(); -} - -/** - * @brief Wait for loop in ms. - * @param Delay in ms. - */ -void LCD_Delay(uint32_t Delay) -{ - HAL_Delay(Delay); -} -#endif /* HAL_SPI_MODULE_ENABLED */ - -/******************************* ADC driver ********************************/ -#ifdef HAL_ADC_MODULE_ENABLED - -/** - * @brief Initializes ADC MSP. - */ -static void ADCx_MspInit(ADC_HandleTypeDef *hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** Configure the GPIOs ***/ - /* Enable GPIO clock */ - NUCLEO_ADCx_GPIO_CLK_ENABLE(); - - /* Configure the selected ADC Channel as analog input */ - GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(NUCLEO_ADCx_GPIO_PORT, &GPIO_InitStruct); - - /*** Configure the ADC peripheral ***/ - /* Enable ADC clock */ - NUCLEO_ADCx_CLK_ENABLE(); -} - -/** - * @brief DeInitializes ADC MSP. - * @note ADC DeInit does not disable the GPIO clock - */ -static void ADCx_MspDeInit(ADC_HandleTypeDef *hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct; - - /*** DeInit the ADC peripheral ***/ - /* Disable ADC clock */ - NUCLEO_ADCx_CLK_DISABLE(); - - /* Configure the selected ADC Channel as analog input */ - GPIO_InitStruct.Pin = NUCLEO_ADCx_GPIO_PIN ; - HAL_GPIO_DeInit(NUCLEO_ADCx_GPIO_PORT, GPIO_InitStruct.Pin); - - /* Disable GPIO clock has to be done by the application*/ - /* NUCLEO_ADCx_GPIO_CLK_DISABLE(); */ -} - -/** - * @brief Initializes ADC HAL. - */ -static void ADCx_Init(void) -{ - if(HAL_ADC_GetState(&hnucleo_Adc) == HAL_ADC_STATE_RESET) - { - /* ADC Config */ - hnucleo_Adc.Instance = NUCLEO_ADCx; - hnucleo_Adc.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; /* (must not exceed 36MHz) */ - hnucleo_Adc.Init.Resolution = ADC_RESOLUTION12b; - hnucleo_Adc.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hnucleo_Adc.Init.ContinuousConvMode = DISABLE; - hnucleo_Adc.Init.DiscontinuousConvMode = DISABLE; - hnucleo_Adc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hnucleo_Adc.Init.EOCSelection = EOC_SINGLE_CONV; - hnucleo_Adc.Init.NbrOfConversion = 1; - hnucleo_Adc.Init.DMAContinuousRequests = DISABLE; - - ADCx_MspInit(&hnucleo_Adc); - HAL_ADC_Init(&hnucleo_Adc); - } -} - -/** - * @brief Initializes ADC HAL. - */ -static void ADCx_DeInit(void) -{ - hnucleo_Adc.Instance = NUCLEO_ADCx; - - HAL_ADC_DeInit(&hnucleo_Adc); - ADCx_MspDeInit(&hnucleo_Adc); -} - -/******************************* LINK JOYSTICK ********************************/ - -/** - * @brief Configures joystick available on adafruit 1.8" TFT shield - * managed through ADC to detect motion. - * @retval Joystickstatus (0=> success, 1=> fail) - */ -uint8_t BSP_JOY_Init(void) -{ - uint8_t status = HAL_ERROR; - - ADCx_Init(); - - /* Select the ADC Channel to be converted */ - sConfig.Channel = NUCLEO_ADCx_CHANNEL; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - sConfig.Rank = 1; - status = HAL_ADC_ConfigChannel(&hnucleo_Adc, &sConfig); - - /* Return Joystick initialization status */ - return status; -} - -/** - * @brief DeInit joystick GPIOs. - * @note JOY DeInit does not disable the Mfx, just set the Mfx pins in Off mode - */ -void BSP_JOY_DeInit(void) -{ - ADCx_DeInit(); -} - -/** - * @brief Returns the Joystick key pressed. - * @note To know which Joystick key is pressed we need to detect the voltage - * level on each key output - * - None : 3.3 V / 4095 - * - SEL : 1.055 V / 1308 - * - DOWN : 0.71 V / 88 - * - LEFT : 3.0 V / 3720 - * - RIGHT : 0.595 V / 737 - * - UP : 1.65 V / 2046 - * @retval JOYState_TypeDef: Code of the Joystick key pressed. - */ -JOYState_TypeDef BSP_JOY_GetState(void) -{ - JOYState_TypeDef state; - uint16_t keyconvertedvalue = 0; - - /* Start the conversion process */ - HAL_ADC_Start(&hnucleo_Adc); - - /* Wait for the end of conversion */ - HAL_ADC_PollForConversion(&hnucleo_Adc, 10); - - /* Check if the continuous conversion of regular channel is finished */ - if((HAL_ADC_GetState(&hnucleo_Adc) & HAL_ADC_STATE_EOC_REG) == HAL_ADC_STATE_EOC_REG) - { - /* Get the converted value of regular channel */ - keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc); - } - - if((keyconvertedvalue > 2010) && (keyconvertedvalue < 2090)) - { - state = JOY_UP; - } - else if((keyconvertedvalue > 680) && (keyconvertedvalue < 780)) - { - state = JOY_RIGHT; - } - else if((keyconvertedvalue > 1270) && (keyconvertedvalue < 1350)) - { - state = JOY_SEL; - } - else if((keyconvertedvalue > 50) && (keyconvertedvalue < 130)) - { - state = JOY_DOWN; - } - else if((keyconvertedvalue > 3680) && (keyconvertedvalue < 3760)) - { - state = JOY_LEFT; - } - else - { - state = JOY_NONE; - } - - /* Loop while a key is pressed */ - if(state != JOY_NONE) - { - keyconvertedvalue = HAL_ADC_GetValue(&hnucleo_Adc); - } - /* Return the code of the Joystick key pressed */ - return state; -} -#endif /* HAL_ADC_MODULE_ENABLED */ - -#endif /* ADAFRUIT_TFT_JOY_SD_ID802 */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.h b/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.h deleted file mode 100644 index 69b690bf0f..0000000000 --- a/Drivers/BSP/STM32F4xx_Nucleo_144/stm32f4xx_nucleo_144.h +++ /dev/null @@ -1,335 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_nucleo_144.h - * @author MCD Application Team - * @brief This file contains definitions for: - * - LEDs and push-button available on STM32F4XX-Nucleo-144 Kit - * from STMicroelectronics - * - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD - * shield (reference ID 802) - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4XX_NUCLEO_144_H -#define __STM32F4XX_NUCLEO_144_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/* To be defined only if the board is provided with the related shield */ -/* https://www.adafruit.com/products/802 */ -#ifndef ADAFRUIT_TFT_JOY_SD_ID802 -#define ADAFRUIT_TFT_JOY_SD_ID802 -#endif - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32F4XX_NUCLEO_144 - * @{ - */ - -/** @addtogroup STM32F4XX_NUCLEO_144_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Exported_Types STM32F4XX NUCLEO 144 LOW LEVEL Exported Types - * @{ - */ -typedef enum -{ - LED1 = 0, - LED_GREEN = LED1, - LED2 = 1, - LED_BLUE = LED2, - LED3 = 2, - LED_RED = LED3 -}Led_TypeDef; - -typedef enum -{ - BUTTON_USER = 0, - /* Alias */ - BUTTON_KEY = BUTTON_USER -}Button_TypeDef; - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -}ButtonMode_TypeDef; - -typedef enum -{ - JOY_NONE = 0, - JOY_SEL = 1, - JOY_DOWN = 2, - JOY_LEFT = 3, - JOY_RIGHT = 4, - JOY_UP = 5 -}JOYState_TypeDef; - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Exported_Constants STM32F4XX NUCLEO 144 LOW LEVEL Exported Constants - * @{ - */ - -/** - * @brief Define for STM32F4XX_NUCLEO_144 board - */ -#if !defined (USE_STM32F4XX_NUCLEO_144) - #define USE_STM32F4XX_NUCLEO_144 -#endif - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_LED STM32F4XX NUCLEO 144 LOW LEVEL LED - * @{ - */ -#define LEDn 3 - -#define LED1_PIN GPIO_PIN_0 -#define LED1_GPIO_PORT GPIOB -#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -#define LED2_PIN GPIO_PIN_7 -#define LED2_GPIO_PORT GPIOB -#define LED2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LED2_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -#define LED3_PIN GPIO_PIN_14 -#define LED3_GPIO_PORT GPIOB -#define LED3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define LED3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() - -#define LEDx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) {__HAL_RCC_GPIOB_CLK_ENABLE();} else\ - {__HAL_RCC_GPIOB_CLK_ENABLE(); }} while(0) -#define LEDx_GPIO_CLK_DISABLE(__INDEX__) do { if((__INDEX__) == 0) {__HAL_RCC_GPIOB_CLK_DISABLE();} else\ - {__HAL_RCC_GPIOB_CLK_DISABLE(); }} while(0) -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_BUTTON STM32F4XX NUCLEO 144 LOW LEVEL BUTTON - * @{ - */ -#define BUTTONn 1 - -/** - * @brief Key push-button - */ -#define USER_BUTTON_PIN GPIO_PIN_13 -#define USER_BUTTON_GPIO_PORT GPIOC -#define USER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define USER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#define USER_BUTTON_EXTI_LINE GPIO_PIN_13 -#define USER_BUTTON_EXTI_IRQn EXTI15_10_IRQn - -#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) USER_BUTTON_GPIO_CLK_ENABLE() -#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) USER_BUTTON_GPIO_CLK_DISABLE() - -/* Aliases */ -#define KEY_BUTTON_PIN USER_BUTTON_PIN -#define KEY_BUTTON_GPIO_PORT USER_BUTTON_GPIO_PORT -#define KEY_BUTTON_GPIO_CLK_ENABLE() USER_BUTTON_GPIO_CLK_ENABLE() -#define KEY_BUTTON_GPIO_CLK_DISABLE() USER_BUTTON_GPIO_CLK_DISABLE() -#define KEY_BUTTON_EXTI_LINE USER_BUTTON_EXTI_LINE -#define KEY_BUTTON_EXTI_IRQn USER_BUTTON_EXTI_IRQn - - -/** - * @brief OTG_FS1 OVER_CURRENT and POWER_SWITCH Pins definition - */ - - -#define OTG_FS1_OVER_CURRENT_PIN GPIO_PIN_7 -#define OTG_FS1_OVER_CURRENT_PORT GPIOG -#define OTG_FS1_OVER_CURRENT_PORT_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() - -#define OTG_FS1_POWER_SWITCH_PIN GPIO_PIN_6 -#define OTG_FS1_POWER_SWITCH_PORT GPIOG -#define OTG_FS1_POWER_SWITCH_PORT_CLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE() - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_BUS STM32F4XX NUCLEO 144 LOW LEVEL BUS - * @{ - */ -/*############################### SPI_A #######################################*/ -#ifdef HAL_SPI_MODULE_ENABLED - -#define NUCLEO_SPIx SPI1 -#define NUCLEO_SPIx_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE() - -#define NUCLEO_SPIx_SCK_AF GPIO_AF5_SPI1 -#define NUCLEO_SPIx_SCK_GPIO_PORT GPIOA -#define NUCLEO_SPIx_SCK_PIN GPIO_PIN_5 -#define NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define NUCLEO_SPIx_SCK_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() - -#define NUCLEO_SPIx_MISO_MOSI_AF GPIO_AF5_SPI1 -#define NUCLEO_SPIx_MISO_MOSI_GPIO_PORT GPIOA -#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() -#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE() -#define NUCLEO_SPIx_MISO_PIN GPIO_PIN_6 -#define NUCLEO_SPIx_MOSI_PIN GPIO_PIN_7 -/* Maximum Timeout values for flags waiting loops. These timeout are not based - on accurate values, they just guarantee that the application will not remain - stuck if the SPI communication is corrupted. - You may modify these timeout values depending on CPU frequency and application - conditions (interrupts routines ...). */ -#define NUCLEO_SPIx_TIMEOUT_MAX 1000 - -#define NUCLEO_SPIx_CS_GPIO_PORT GPIOD -#define NUCLEO_SPIx_CS_PIN GPIO_PIN_14 -#define NUCLEO_SPIx_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define NUCLEO_SPIx_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -#define SPIx__CS_LOW() HAL_GPIO_WritePin(NUCLEO_SPIx_CS_GPIO_PORT, NUCLEO_SPIx_CS_PIN, GPIO_PIN_RESET) -#define SPIx__CS_HIGH() HAL_GPIO_WritePin(NUCLEO_SPIx_CS_GPIO_PORT, NUCLEO_SPIx_CS_PIN, GPIO_PIN_SET) - -/** - * @brief SD Control Lines management - */ -#define SD_CS_LOW() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_RESET) -#define SD_CS_HIGH() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_SET) - -/** - * @brief LCD Control Lines management - */ -#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_RESET) -#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_SET) -#define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_RESET) -#define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_SET) - -/** - * @brief SD Control Interface pins (shield D4) - */ -#define SD_CS_PIN GPIO_PIN_14 -#define SD_CS_GPIO_PORT GPIOF -#define SD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define SD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -/** - * @brief LCD Control Interface pins (shield D10) - */ -#define LCD_CS_PIN GPIO_PIN_14 -#define LCD_CS_GPIO_PORT GPIOD -#define LCD_CS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() -#define LCD_CS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() - -/** - * @brief LCD Data/Command Interface pins (shield D8) - */ -#define LCD_DC_PIN GPIO_PIN_12 -#define LCD_DC_GPIO_PORT GPIOF -#define LCD_DC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define LCD_DC_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#endif /* HAL_SPI_MODULE_ENABLED */ - -/*################################ ADCx for Nucleo 144 board ######################################*/ -/** - * @brief ADCx Interface pins - * used to detect motion of Joystick available on Adafruit 1.8" TFT shield - */ - -/* For some Nucleo144 boards, Arduino UNO pin7 (A3) is connected to PF3 in others to PC01 */ -#if defined(ADC3) -#define NUCLEO_ADCx ADC3 -#define NUCLEO_ADCx_CLK_ENABLE() __HAL_RCC_ADC3_CLK_ENABLE() -#define NUCLEO_ADCx_CLK_DISABLE() __HAL_RCC_ADC3_CLK_DISABLE() - -#define NUCLEO_ADCx_CHANNEL ADC_CHANNEL_9 -#define NUCLEO_ADCx_GPIO_PORT GPIOF -#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_3 -#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOF_CLK_ENABLE() -#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOF_CLK_DISABLE() - -#else -#define NUCLEO_ADCx ADC1 -#define NUCLEO_ADCx_CLK_ENABLE() __HAL_RCC_ADC1_CLK_ENABLE() -#define NUCLEO_ADCx_CLK_DISABLE() __HAL_RCC_ADC1_CLK_DISABLE() -#define NUCLEO_ADCx_CHANNEL ADC_CHANNEL_11 - -#define NUCLEO_ADCx_GPIO_PORT GPIOC -#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_1 -#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() -#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() -#endif /* HAL_ADC_MODULE_ENABLED */ - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Exported_Macros STM32F4XX NUCLEO 144 LOW LEVEL Exported Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup STM32F4XX_NUCLEO_144_LOW_LEVEL_Exported_Functions STM32F4XX NUCLEO 144 LOW LEVEL Exported Functions - * @{ - */ -uint32_t BSP_GetVersion(void); -void BSP_LED_Init(Led_TypeDef Led); -void BSP_LED_DeInit(Led_TypeDef Led); -void BSP_LED_On(Led_TypeDef Led); -void BSP_LED_Off(Led_TypeDef Led); -void BSP_LED_Toggle(Led_TypeDef Led); -void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -void BSP_PB_DeInit(Button_TypeDef Button); -uint32_t BSP_PB_GetState(Button_TypeDef Button); -#ifdef HAL_ADC_MODULE_ENABLED -uint8_t BSP_JOY_Init(void); -JOYState_TypeDef BSP_JOY_GetState(void); -void BSP_JOY_DeInit(void); -#endif /* HAL_ADC_MODULE_ENABLED */ - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4XX_NUCLEO_144_H */ diff --git a/Drivers/CMSIS/Device/ST/STM32F4xx b/Drivers/CMSIS/Device/ST/STM32F4xx index 3b64b7b0b5..5f41fb29d2 160000 --- a/Drivers/CMSIS/Device/ST/STM32F4xx +++ b/Drivers/CMSIS/Device/ST/STM32F4xx @@ -1 +1 @@ -Subproject commit 3b64b7b0b546cefe84f13c65508126eea58b97d8 +Subproject commit 5f41fb29d22773896c780052bf61e47fc924d524 diff --git a/Drivers/STM32F4xx_HAL_Driver b/Drivers/STM32F4xx_HAL_Driver index bfa4a8fde4..c2e1406d7e 160000 --- a/Drivers/STM32F4xx_HAL_Driver +++ b/Drivers/STM32F4xx_HAL_Driver @@ -1 +1 @@ -Subproject commit bfa4a8fde4fa5141619be006df8ef3e08265bd65 +Subproject commit c2e1406d7ea4b73aa42b98ddeb75a8670b1a5a16 diff --git a/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c b/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c index 8207618a11..c64ba9913b 100644 --- a/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c +++ b/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c @@ -479,7 +479,15 @@ static uint8_t USBD_CUSTOM_HID_Setup(USBD_HandleTypeDef *pdev, } } - (void)USBD_CtlSendData(pdev, pbuf, len); + if (pbuf != NULL) + { + (void)USBD_CtlSendData(pdev, pbuf, len); + } + else + { + USBD_CtlError(pdev, req); + ret = USBD_FAIL; + } break; case USB_REQ_GET_INTERFACE: diff --git a/Middlewares/ST/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c b/Middlewares/ST/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c index 3a1b29ef49..67ba12c48e 100644 --- a/Middlewares/ST/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c +++ b/Middlewares/ST/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c @@ -512,6 +512,7 @@ static uint8_t USBD_DFU_EP0_RxReady(USBD_HandleTypeDef *pdev) return (uint8_t)USBD_OK; } + /** * @brief USBD_DFU_EP0_TxReady * handle EP0 TRx Ready event @@ -525,7 +526,7 @@ static uint8_t USBD_DFU_EP0_TxReady(USBD_HandleTypeDef *pdev) uint32_t addr; USBD_DFU_HandleTypeDef *hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId]; USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData[pdev->classId]; -#if (USBD_DFU_VENDOR_CMD_ENABLED == 1U) +#if (USBD_DFU_VENDOR_CMD_ENABLED == 1U) || (USBD_DFU_VENDOR_CHECK_ENABLED == 1U) uint32_t VendorStatus = 0U; #endif /* USBD_DFU_VENDOR_CMD_ENABLED */ @@ -619,7 +620,6 @@ static uint8_t USBD_DFU_EP0_TxReady(USBD_HandleTypeDef *pdev) hdfu->dev_status[4] = hdfu->dev_state; return (uint8_t)USBD_FAIL; } - } #if (USBD_DFU_VENDOR_CMD_ENABLED == 1U) else @@ -647,13 +647,57 @@ static uint8_t USBD_DFU_EP0_TxReady(USBD_HandleTypeDef *pdev) } else { +#if (USBD_DFU_VENDOR_CMD_ENABLED == 1U) + if (hdfu->wlength > 0U) + { +#if (USBD_DFU_VENDOR_CHECK_ENABLED == 1U) + if (DfuInterface->VendorCheck(hdfu->buffer.d8, IS_DFU_DOWNLOAD, &VendorStatus) != USBD_OK) + { + /* Update the state machine */ + hdfu->dev_state = DFU_STATE_ERROR; + hdfu->dev_status[0] = (uint8_t)VendorStatus; + hdfu->dev_status[1] = 0U; + hdfu->dev_status[2] = 0U; + hdfu->dev_status[3] = 0U; + hdfu->dev_status[4] = hdfu->dev_state; + return (uint8_t)USBD_FAIL; + } +#endif /* USBD_DFU_VENDOR_CHECK_ENABLED */ + + /* Vendor specific DFU CMD */ + if (DfuInterface->VendorDownloadCMD(hdfu->buffer.d8, hdfu->wblock_num, + hdfu->wlength, &VendorStatus) != USBD_OK) + { + /* Update the state machine */ + hdfu->dev_state = DFU_STATE_ERROR; + hdfu->dev_status[0] = (uint8_t)VendorStatus; + hdfu->dev_status[1] = 0U; + hdfu->dev_status[2] = 0U; + hdfu->dev_status[3] = 0U; + hdfu->dev_status[4] = hdfu->dev_state; + return (uint8_t)USBD_FAIL; + } + } + else + { + /* Reset the block number */ + hdfu->wblock_num = 0U; + + /* Call the error management function (command will be NAKed) */ + req.bmRequest = 0U; + req.wLength = 1U; + USBD_CtlError(pdev, &req); + } +#else /* Reset the global length and block number */ hdfu->wlength = 0U; hdfu->wblock_num = 0U; + /* Call the error management function (command will be NAKed) */ req.bmRequest = 0U; req.wLength = 1U; USBD_CtlError(pdev, &req); +#endif /* USBD_DFU_VENDOR_CMD_ENABLED */ } } /* Regular Download Command */ @@ -856,10 +900,10 @@ static void DFU_Download(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { USBD_DFU_HandleTypeDef *hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId]; -#if (USBD_DFU_VENDOR_CMD_ENABLED == 1U) +#if (USBD_DFU_VENDOR_CHECK_ENABLED == 1U) USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData[pdev->classId]; uint32_t VendorStatus = 0U; -#endif /* USBD_DFU_VENDOR_CMD_ENABLED */ +#endif /* USBD_DFU_VENDOR_CHECK_ENABLED */ if (hdfu == NULL) { diff --git a/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c index 186a309cc9..0576c877cd 100644 --- a/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c +++ b/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c @@ -83,11 +83,11 @@ /** * @brief USBD_Init - * Initializes the device stack and load the class driver + * Initialize the device stack and load the class driver * @param pdev: device instance * @param pdesc: Descriptor structure address * @param id: Low level core index - * @retval None + * @retval status: USBD Status */ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id) @@ -142,9 +142,9 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, /** * @brief USBD_DeInit - * Re-Initialize the device library + * De-Initialize the device library * @param pdev: device instance - * @retval status: status + * @retval status: USBD Status */ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev) { @@ -195,7 +195,7 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev) /** * @brief USBD_RegisterClass * Link class driver to Device Core. - * @param pDevice : Device Handle + * @param pdev: Device Handle * @param pclass: Class handle * @retval USBD Status */ @@ -228,7 +228,7 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDe #endif /* USE_USB_FS */ /* Increment the NumClasses */ - pdev->NumClasses ++; + pdev->NumClasses++; return USBD_OK; } @@ -243,10 +243,10 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDe * @param EpAddr: Endpoint Address handle * @retval USBD Status */ -USBD_StatusTypeDef USBD_RegisterClassComposite(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass, - USBD_CompositeClassTypeDef classtype, uint8_t *EpAddr) +USBD_StatusTypeDef USBD_RegisterClassComposite(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass, + USBD_CompositeClassTypeDef classtype, uint8_t *EpAddr) { - USBD_StatusTypeDef ret = USBD_OK; + USBD_StatusTypeDef ret = USBD_OK; uint16_t len = 0U; if ((pdev->classId < USBD_MAX_SUPPORTED_CLASS) && (pdev->NumClasses < USBD_MAX_SUPPORTED_CLASS)) @@ -291,7 +291,7 @@ USBD_StatusTypeDef USBD_RegisterClassComposite(USBD_HandleTypeDef *pdev, USBD_C /** * @brief USBD_UnRegisterClassComposite * UnLink all composite class drivers from Device Core. - * @param pDevice : Device Handle + * @param pdev: Device Handle * @retval USBD Status */ USBD_StatusTypeDef USBD_UnRegisterClassComposite(USBD_HandleTypeDef *pdev) @@ -374,6 +374,7 @@ USBD_StatusTypeDef USBD_RegisterDevStateCallback(USBD_HandleTypeDef *pdev, USBD_ return USBD_OK; } #endif /* USBD_USER_REGISTER_CALLBACK */ + /** * @brief USBD_Start * Start the USB Device Core. @@ -499,7 +500,7 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) * Clear current configuration * @param pdev: device instance * @param cfgidx: configuration index - * @retval status: USBD_StatusTypeDef + * @retval status */ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) { @@ -539,6 +540,7 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx) * @brief USBD_LL_SetupStage * Handle the setup stage * @param pdev: device instance + * @param psetup: setup packet buffer pointer * @retval status */ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup) @@ -673,6 +675,7 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, * Handle data in stage * @param pdev: device instance * @param epnum: endpoint index + * @param pdata: data pointer * @retval status */ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, @@ -765,7 +768,6 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, * @param pdev: device instance * @retval status */ - USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev) { USBD_StatusTypeDef ret = USBD_OK; @@ -848,7 +850,6 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, * @param pdev: device instance * @retval status */ - USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev) { if (pdev->dev_state != USBD_STATE_SUSPENDED) @@ -867,7 +868,6 @@ USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev) * @param pdev: device instance * @retval status */ - USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev) { if (pdev->dev_state == USBD_STATE_SUSPENDED) @@ -884,7 +884,6 @@ USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev) * @param pdev: device instance * @retval status */ - USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev) { /* The SOF event can be distributed for all classes that support it */ @@ -925,6 +924,7 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev) * @brief USBD_LL_IsoINIncomplete * Handle iso in incomplete event * @param pdev: device instance + * @param epnum: Endpoint number * @retval status */ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, @@ -950,6 +950,7 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, * @brief USBD_LL_IsoOUTIncomplete * Handle iso out incomplete event * @param pdev: device instance + * @param epnum: Endpoint number * @retval status */ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, diff --git a/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c index af9a0154c6..814b810c5b 100644 --- a/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c +++ b/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c @@ -46,7 +46,9 @@ /** @defgroup USBD_REQ_Private_Defines * @{ */ - +#ifndef USBD_MAX_STR_DESC_SIZ +#define USBD_MAX_STR_DESC_SIZ 64U +#endif /* USBD_MAX_STR_DESC_SIZ */ /** * @} */ @@ -421,7 +423,7 @@ USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef * Handle Get Descriptor requests * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -675,7 +677,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *r * Set device address * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -814,7 +816,7 @@ static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReq * Handle Get device configuration request * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -848,7 +850,7 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) * Handle Get Status request * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -889,7 +891,7 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) * Handle Set device feature request * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -915,7 +917,7 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) * Handle clear device feature request * @param pdev: device instance * @param req: usb request - * @retval status + * @retval None */ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { @@ -941,8 +943,8 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) /** * @brief USBD_ParseSetupRequest * Copy buffer into setup structure - * @param pdev: device instance * @param req: usb request + * @param pdata: setup data pointer * @retval None */ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata) @@ -1002,7 +1004,7 @@ void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len) } pdesc = desc; - *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U; + *len = MIN(USBD_MAX_STR_DESC_SIZ, ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U); unicode[idx] = *(uint8_t *)len; idx++; diff --git a/Middlewares/ST/STM32_USB_Device_Library/Release_Notes.html b/Middlewares/ST/STM32_USB_Device_Library/Release_Notes.html index 31e63f7b67..94390d06ab 100644 --- a/Middlewares/ST/STM32_USB_Device_Library/Release_Notes.html +++ b/Middlewares/ST/STM32_USB_Device_Library/Release_Notes.html @@ -60,6 +60,35 @@

Purpose

Update History

+ +
+

Main Changes

+ + + + + + + + + + + + + + + + + + + + +
Headline
USB Core:
Minor enhancement; add a check on device string descriptor length
USB DFU Class:
Improve DFU Vendor Commands support
+
+
+
+
diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/AUDIO/Src/usbh_audio.c b/Middlewares/ST/STM32_USB_Host_Library/Class/AUDIO/Src/usbh_audio.c index 28add44af8..2f9e61dda4 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/AUDIO/Src/usbh_audio.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/AUDIO/Src/usbh_audio.c @@ -63,7 +63,6 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_AUDIO_CORE_Private_Defines * @{ */ @@ -72,7 +71,6 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_AUDIO_CORE_Private_Macros * @{ */ @@ -80,7 +78,6 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_AUDIO_CORE_Private_Variables * @{ */ @@ -89,7 +86,6 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_AUDIO_CORE_Private_FunctionPrototypes * @{ */ @@ -1578,7 +1574,7 @@ static USBH_StatusTypeDef USBH_AUDIO_SetEndpointControls(USBH_HandleTypeDef *pho wValue = SAMPLING_FREQ_CONTROL << 8U; wIndex = Ep; - wLength = 3U; /*length of the frequency parameter*/ + wLength = 3U; /* length of the frequency parameter */ phost->Control.setup.b.bmRequestType = USB_H2D | USB_REQ_RECIPIENT_ENDPOINT | \ USB_REQ_TYPE_CLASS; @@ -1589,7 +1585,6 @@ static USBH_StatusTypeDef USBH_AUDIO_SetEndpointControls(USBH_HandleTypeDef *pho phost->Control.setup.b.wLength.w = wLength; return (USBH_CtlReq(phost, (uint8_t *)buff, wLength)); - } /** @@ -1903,6 +1898,10 @@ USBH_StatusTypeDef USBH_AUDIO_SetFrequency(USBH_HandleTypeDef *phost, AUDIO_Handle->play_state = AUDIO_PLAYBACK_SET_EP; Status = USBH_OK; } + else + { + USBH_ErrLog("Sample Rate not supported by the Audio Device"); + } } } return Status; diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Src/usbh_cdc.c b/Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Src/usbh_cdc.c index da0b298ff7..079a32555f 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Src/usbh_cdc.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/CDC/Src/usbh_cdc.c @@ -751,7 +751,7 @@ static void CDC_ProcessReception(USBH_HandleTypeDef *phost) { length = USBH_LL_GetLastXferSize(phost, CDC_Handle->DataItf.InPipe); - if (((CDC_Handle->RxDataLength - length) > 0U) && (length > CDC_Handle->DataItf.InEpSize)) + if (((CDC_Handle->RxDataLength - length) > 0U) && (length == CDC_Handle->DataItf.InEpSize)) { CDC_Handle->RxDataLength -= length; CDC_Handle->pRxData += length; diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc/usbh_msc.h b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc/usbh_msc.h index d4b242d342..f7e98be812 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc/usbh_msc.h +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Inc/usbh_msc.h @@ -63,6 +63,7 @@ typedef enum MSC_WRITE, MSC_UNRECOVERED_ERROR, MSC_PERIODIC_CHECK, + MSC_USER_NOTIFY } MSC_StateTypeDef; @@ -121,6 +122,7 @@ typedef struct _MSC_Process BOT_HandleTypeDef hbot; MSC_LUNTypeDef unit[MAX_SUPPORTED_LUN]; uint16_t current_lun; + uint16_t lun; uint16_t rw_lun; uint32_t timer; } diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c index 6327696fcd..e97cd63346 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc.c @@ -62,7 +62,6 @@ EndBSPDependencies */ * @{ */ - /** @defgroup USBH_MSC_CORE_Private_TypesDefinitions * @{ */ @@ -84,7 +83,6 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_MSC_CORE_Private_Variables * @{ */ @@ -92,21 +90,15 @@ EndBSPDependencies */ * @} */ - /** @defgroup USBH_MSC_CORE_Private_FunctionPrototypes * @{ */ static USBH_StatusTypeDef USBH_MSC_InterfaceInit(USBH_HandleTypeDef *phost); - static USBH_StatusTypeDef USBH_MSC_InterfaceDeInit(USBH_HandleTypeDef *phost); - static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost); - static USBH_StatusTypeDef USBH_MSC_ClassRequest(USBH_HandleTypeDef *phost); - static USBH_StatusTypeDef USBH_MSC_SOFProcess(USBH_HandleTypeDef *phost); - static USBH_StatusTypeDef USBH_MSC_RdWrProcess(USBH_HandleTypeDef *phost, uint8_t lun); USBH_ClassTypeDef USBH_msc = @@ -121,26 +113,21 @@ USBH_ClassTypeDef USBH_msc = NULL, }; - /** * @} */ - /** @defgroup USBH_MSC_CORE_Exported_Variables * @{ */ - /** * @} */ - /** @defgroup USBH_MSC_CORE_Private_Functions * @{ */ - /** * @brief USBH_MSC_InterfaceInit * The function init the MSC class. @@ -283,13 +270,14 @@ static USBH_StatusTypeDef USBH_MSC_ClassRequest(USBH_HandleTypeDef *phost) { MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; USBH_StatusTypeDef status = USBH_BUSY; - uint8_t i; + uint8_t lun_idx; /* Switch MSC REQ state machine */ switch (MSC_Handle->req_state) { case MSC_REQ_IDLE: case MSC_REQ_GET_MAX_LUN: + /* Issue GetMaxLUN request */ status = USBH_MSC_BOT_REQ_GetMaxLUN(phost, &MSC_Handle->max_lun); @@ -306,10 +294,10 @@ static USBH_StatusTypeDef USBH_MSC_ClassRequest(USBH_HandleTypeDef *phost) MSC_Handle->max_lun = (MSC_Handle->max_lun > MAX_SUPPORTED_LUN) ? MAX_SUPPORTED_LUN : (MSC_Handle->max_lun + 1U); USBH_UsrLog("Number of supported LUN: %d", MSC_Handle->max_lun); - for (i = 0U; i < MSC_Handle->max_lun; i++) + for (lun_idx = 0U; lun_idx < MSC_Handle->max_lun; lun_idx++) { - MSC_Handle->unit[i].prev_ready_state = USBH_FAIL; - MSC_Handle->unit[i].state_changed = 0U; + MSC_Handle->unit[lun_idx].prev_ready_state = USBH_FAIL; + MSC_Handle->unit[lun_idx].state_changed = 0U; } } break; @@ -348,8 +336,8 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) if (MSC_Handle->current_lun < MSC_Handle->max_lun) { - MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_NOT_READY; + /* Switch MSC REQ state machine */ switch (MSC_Handle->unit[MSC_Handle->current_lun].state) { @@ -369,7 +357,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) USBH_UsrLog("Inquiry Version : %s", MSC_Handle->unit[MSC_Handle->current_lun].inquiry.revision_id); MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_TEST_UNIT_READY; } - if (scsi_status == USBH_FAIL) + else if (scsi_status == USBH_FAIL) { MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_REQUEST_SENSE; } @@ -377,7 +365,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) { if (scsi_status == USBH_UNRECOVERED_ERROR) { - MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_IDLE; + MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_UNRECOVERED_ERROR; MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_ERROR; } } @@ -401,7 +389,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_OK; MSC_Handle->unit[MSC_Handle->current_lun].prev_ready_state = USBH_OK; } - if (ready_status == USBH_FAIL) + else if (ready_status == USBH_FAIL) { /* Media not ready, so try to check again during 10s */ if (MSC_Handle->unit[MSC_Handle->current_lun].prev_ready_state != USBH_FAIL) @@ -421,7 +409,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) { if (ready_status == USBH_UNRECOVERED_ERROR) { - MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_IDLE; + MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_UNRECOVERED_ERROR; MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_ERROR; } } @@ -452,7 +440,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) { if (scsi_status == USBH_UNRECOVERED_ERROR) { - MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_IDLE; + MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_UNRECOVERED_ERROR; MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_ERROR; } } @@ -480,16 +468,17 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_IDLE; MSC_Handle->current_lun++; } - if (scsi_status == USBH_FAIL) + else if (scsi_status == USBH_FAIL) { USBH_UsrLog("MSC Device NOT ready"); MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_UNRECOVERED_ERROR; + MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_ERROR; } else { if (scsi_status == USBH_UNRECOVERED_ERROR) { - MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_IDLE; + MSC_Handle->unit[MSC_Handle->current_lun].state = MSC_UNRECOVERED_ERROR; MSC_Handle->unit[MSC_Handle->current_lun].error = MSC_ERROR; } } @@ -515,7 +504,7 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) else { MSC_Handle->current_lun = 0U; - MSC_Handle->state = MSC_IDLE; + MSC_Handle->state = MSC_USER_NOTIFY; #if (USBH_USE_OS == 1U) phost->os_msg = (uint32_t)USBH_CLASS_EVENT; @@ -525,10 +514,40 @@ static USBH_StatusTypeDef USBH_MSC_Process(USBH_HandleTypeDef *phost) (void)osMessageQueuePut(phost->os_event, &phost->os_msg, 0U, 0U); #endif #endif - phost->pUser(phost, HOST_USER_CLASS_ACTIVE); } break; + case MSC_USER_NOTIFY: + if (MSC_Handle->lun < MSC_Handle->max_lun) + { + MSC_Handle->current_lun = MSC_Handle->lun; + if (MSC_Handle->unit[MSC_Handle->current_lun].error == MSC_OK) + { + phost->pUser(phost, HOST_USER_CLASS_ACTIVE); + } + else + { + phost->pUser(phost, HOST_USER_UNRECOVERED_ERROR); + } + + MSC_Handle->lun++; + } + else + { + MSC_Handle->lun = 0U; + MSC_Handle->state = MSC_IDLE; + } + +#if (USBH_USE_OS == 1U) + phost->os_msg = (uint32_t)USBH_CLASS_EVENT; +#if (osCMSIS < 0x20000U) + (void)osMessagePut(phost->os_event, phost->os_msg, 0U); +#else + (void)osMessageQueuePut(phost->os_event, &phost->os_msg, 0U, 0U); +#endif +#endif + break; + case MSC_IDLE: error = USBH_OK; break; @@ -569,7 +588,6 @@ static USBH_StatusTypeDef USBH_MSC_RdWrProcess(USBH_HandleTypeDef *phost, uint8_ /* Switch MSC REQ state machine */ switch (MSC_Handle->unit[lun].state) { - case MSC_READ: scsi_status = USBH_MSC_SCSI_Read(phost, lun, 0U, NULL, 0U); @@ -645,7 +663,7 @@ static USBH_StatusTypeDef USBH_MSC_RdWrProcess(USBH_HandleTypeDef *phost, uint8_ error = USBH_FAIL; } - if (scsi_status == USBH_FAIL) + else if (scsi_status == USBH_FAIL) { USBH_UsrLog("MSC Device NOT ready"); } @@ -728,6 +746,9 @@ uint8_t USBH_MSC_UnitIsReady(USBH_HandleTypeDef *phost, uint8_t lun) MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; uint8_t res; + /* Store the current lun */ + MSC_Handle->current_lun = lun; + if ((phost->gState == HOST_CLASS) && (MSC_Handle->unit[lun].error == MSC_OK)) { res = 1U; @@ -750,6 +771,10 @@ uint8_t USBH_MSC_UnitIsReady(USBH_HandleTypeDef *phost, uint8_t lun) USBH_StatusTypeDef USBH_MSC_GetLUNInfo(USBH_HandleTypeDef *phost, uint8_t lun, MSC_LUNTypeDef *info) { MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; + + /* Store the current lun */ + MSC_Handle->current_lun = lun; + if (phost->gState == HOST_CLASS) { (void)USBH_memcpy(info, &MSC_Handle->unit[lun], sizeof(MSC_LUNTypeDef)); @@ -780,6 +805,9 @@ USBH_StatusTypeDef USBH_MSC_Read(USBH_HandleTypeDef *phost, uint32_t timeout; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; + /* Store the current lun */ + MSC_Handle->current_lun = lun; + if ((phost->device.is_connected == 0U) || (phost->gState != HOST_CLASS) || (MSC_Handle->unit[lun].state != MSC_IDLE)) @@ -787,9 +815,7 @@ USBH_StatusTypeDef USBH_MSC_Read(USBH_HandleTypeDef *phost, return USBH_FAIL; } - MSC_Handle->state = MSC_READ; MSC_Handle->unit[lun].state = MSC_READ; - MSC_Handle->rw_lun = lun; (void)USBH_MSC_SCSI_Read(phost, lun, address, pbuf, length); @@ -799,11 +825,9 @@ USBH_StatusTypeDef USBH_MSC_Read(USBH_HandleTypeDef *phost, { if (((phost->Timer - timeout) > (10000U * length)) || (phost->device.is_connected == 0U)) { - MSC_Handle->state = MSC_IDLE; return USBH_FAIL; } } - MSC_Handle->state = MSC_IDLE; return USBH_OK; } @@ -827,6 +851,9 @@ USBH_StatusTypeDef USBH_MSC_Write(USBH_HandleTypeDef *phost, uint32_t timeout; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; + /* Store the current lun */ + MSC_Handle->current_lun = lun; + if ((phost->device.is_connected == 0U) || (phost->gState != HOST_CLASS) || (MSC_Handle->unit[lun].state != MSC_IDLE)) @@ -834,9 +861,7 @@ USBH_StatusTypeDef USBH_MSC_Write(USBH_HandleTypeDef *phost, return USBH_FAIL; } - MSC_Handle->state = MSC_WRITE; MSC_Handle->unit[lun].state = MSC_WRITE; - MSC_Handle->rw_lun = lun; (void)USBH_MSC_SCSI_Write(phost, lun, address, pbuf, length); @@ -845,11 +870,10 @@ USBH_StatusTypeDef USBH_MSC_Write(USBH_HandleTypeDef *phost, { if (((phost->Timer - timeout) > (10000U * length)) || (phost->device.is_connected == 0U)) { - MSC_Handle->state = MSC_IDLE; return USBH_FAIL; } } - MSC_Handle->state = MSC_IDLE; + return USBH_OK; } diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c index f71e743e06..64099e4879 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_bot.c @@ -207,7 +207,6 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) MSC_Handle->hbot.state = BOT_DATA_OUT; } } - else { /* If there is NO Data Transfer Stage */ @@ -241,7 +240,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) { if (URB_Status == USBH_URB_STALL) { - MSC_Handle->hbot.state = BOT_ERROR_OUT; + MSC_Handle->hbot.state = BOT_ERROR_OUT; #if (USBH_USE_OS == 1U) phost->os_msg = (uint32_t)USBH_URB_EVENT; @@ -291,7 +290,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) else { /* If value was 0, and successful transfer, then change the state */ - MSC_Handle->hbot.state = BOT_RECEIVE_CSW; + MSC_Handle->hbot.state = BOT_RECEIVE_CSW; #if (USBH_USE_OS == 1U) phost->os_msg = (uint32_t)USBH_URB_EVENT; @@ -362,7 +361,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) else { /* If value was 0, and successful transfer, then change the state */ - MSC_Handle->hbot.state = BOT_RECEIVE_CSW; + MSC_Handle->hbot.state = BOT_RECEIVE_CSW; } #if (USBH_USE_OS == 1U) @@ -378,7 +377,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) else if (URB_Status == USBH_URB_NOTREADY) { /* Resend same data */ - MSC_Handle->hbot.state = BOT_DATA_OUT; + MSC_Handle->hbot.state = BOT_DATA_OUT; #if (USBH_USE_OS == 1U) phost->os_msg = (uint32_t)USBH_URB_EVENT; @@ -392,7 +391,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) else if (URB_Status == USBH_URB_STALL) { - MSC_Handle->hbot.state = BOT_ERROR_OUT; + MSC_Handle->hbot.state = BOT_ERROR_OUT; /* Refer to USB Mass-Storage Class : BOT (www.usb.org) 6.7.3 Ho - Host expects to send data to the device @@ -420,7 +419,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) (void)USBH_BulkReceiveData(phost, MSC_Handle->hbot.csw.data, BOT_CSW_LENGTH, MSC_Handle->InPipe); - MSC_Handle->hbot.state = BOT_RECEIVE_CSW_WAIT; + MSC_Handle->hbot.state = BOT_RECEIVE_CSW_WAIT; break; case BOT_RECEIVE_CSW_WAIT: @@ -454,7 +453,7 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) } else if (URB_Status == USBH_URB_STALL) { - MSC_Handle->hbot.state = BOT_ERROR_IN; + MSC_Handle->hbot.state = BOT_ERROR_IN; #if (USBH_USE_OS == 1U) phost->os_msg = (uint32_t)USBH_URB_EVENT; @@ -492,7 +491,6 @@ USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun) if (error == USBH_OK) { - toggle = USBH_LL_GetToggle(phost, MSC_Handle->OutPipe); (void)USBH_LL_SetToggle(phost, MSC_Handle->OutPipe, 1U - toggle); (void)USBH_LL_SetToggle(phost, MSC_Handle->InPipe, 0U); @@ -589,7 +587,6 @@ static BOT_CSWStatusTypeDef USBH_MSC_DecodeCSW(USBH_HandleTypeDef *phost) (11) Ho > Do (Host expects to send data to the device, Device intends to receive data from the host)*/ - status = BOT_CSW_PHASE_ERROR; } else @@ -625,7 +622,6 @@ static BOT_CSWStatusTypeDef USBH_MSC_DecodeCSW(USBH_HandleTypeDef *phost) Device intends to send data to the host) (12) Ho = Do (Host expects to send data to the device, Device intends to receive data from the host) - */ status = BOT_CSW_CMD_PASSED; @@ -634,7 +630,6 @@ static BOT_CSWStatusTypeDef USBH_MSC_DecodeCSW(USBH_HandleTypeDef *phost) { status = BOT_CSW_CMD_FAILED; } - else if (MSC_Handle->hbot.csw.field.Status == 2U) { /* Refer to USB Mass-Storage Class : BOT (www.usb.org) diff --git a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c index 42ceeb437d..19f79ada14 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c @@ -102,20 +102,20 @@ EndBSPDependencies */ USBH_StatusTypeDef USBH_MSC_SCSI_TestUnitReady(USBH_HandleTypeDef *phost, uint8_t lun) { - USBH_StatusTypeDef error = USBH_FAIL; + USBH_StatusTypeDef error = USBH_FAIL; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; switch (MSC_Handle->hbot.cmd_state) { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ + /* Prepare the CBW and relevant field */ MSC_Handle->hbot.cbw.field.DataTransferLength = DATA_LEN_MODE_TEST_UNIT_READY; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_OUT; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; (void)USBH_memset(MSC_Handle->hbot.cbw.field.CB, 0, CBW_CB_LENGTH); - MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_TEST_UNIT_READY; + MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_TEST_UNIT_READY; MSC_Handle->hbot.state = BOT_SEND_CBW; MSC_Handle->hbot.cmd_state = BOT_CMD_WAIT; @@ -145,14 +145,14 @@ USBH_StatusTypeDef USBH_MSC_SCSI_ReadCapacity(USBH_HandleTypeDef *phost, uint8_t lun, SCSI_CapacityTypeDef *capacity) { - USBH_StatusTypeDef error = USBH_BUSY; + USBH_StatusTypeDef error = USBH_BUSY; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; switch (MSC_Handle->hbot.cmd_state) { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ + /* Prepare the CBW and relevant field */ MSC_Handle->hbot.cbw.field.DataTransferLength = DATA_LEN_READ_CAPACITY10; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_IN; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; @@ -173,11 +173,11 @@ USBH_StatusTypeDef USBH_MSC_SCSI_ReadCapacity(USBH_HandleTypeDef *phost, if (error == USBH_OK) { - /*assign the capacity*/ + /* Assign the capacity */ capacity->block_nbr = MSC_Handle->hbot.pbuf[3] | ((uint32_t)MSC_Handle->hbot.pbuf[2] << 8U) | \ ((uint32_t)MSC_Handle->hbot.pbuf[1] << 16U) | ((uint32_t)MSC_Handle->hbot.pbuf[0] << 24U); - /*assign the page length*/ + /* Assign the page length */ capacity->block_size = (uint16_t)(MSC_Handle->hbot.pbuf[7] | ((uint32_t)MSC_Handle->hbot.pbuf[6] << 8U)); } break; @@ -207,18 +207,18 @@ USBH_StatusTypeDef USBH_MSC_SCSI_Inquiry(USBH_HandleTypeDef *phost, uint8_t lun, { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ + /* Prepare the CBW and relevant field */ MSC_Handle->hbot.cbw.field.DataTransferLength = DATA_LEN_INQUIRY; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_IN; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; (void)USBH_memset(MSC_Handle->hbot.cbw.field.CB, 0, CBW_LENGTH); - MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_INQUIRY; - MSC_Handle->hbot.cbw.field.CB[1] = (lun << 5); - MSC_Handle->hbot.cbw.field.CB[2] = 0U; - MSC_Handle->hbot.cbw.field.CB[3] = 0U; - MSC_Handle->hbot.cbw.field.CB[4] = 0x24U; - MSC_Handle->hbot.cbw.field.CB[5] = 0U; + MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_INQUIRY; + MSC_Handle->hbot.cbw.field.CB[1] = (lun << 5); + MSC_Handle->hbot.cbw.field.CB[2] = 0U; + MSC_Handle->hbot.cbw.field.CB[3] = 0U; + MSC_Handle->hbot.cbw.field.CB[4] = 0x24U; + MSC_Handle->hbot.cbw.field.CB[5] = 0U; MSC_Handle->hbot.state = BOT_SEND_CBW; @@ -234,7 +234,7 @@ USBH_StatusTypeDef USBH_MSC_SCSI_Inquiry(USBH_HandleTypeDef *phost, uint8_t lun, if (error == USBH_OK) { (void)USBH_memset(inquiry, 0, sizeof(SCSI_StdInquiryDataTypeDef)); - /*assign Inquiry Data */ + /* Assign Inquiry Data */ inquiry->DeviceType = MSC_Handle->hbot.pbuf[0] & 0x1FU; inquiry->PeripheralQualifier = MSC_Handle->hbot.pbuf[0] >> 5U; @@ -272,25 +272,25 @@ USBH_StatusTypeDef USBH_MSC_SCSI_RequestSense(USBH_HandleTypeDef *phost, uint8_t lun, SCSI_SenseTypeDef *sense_data) { - USBH_StatusTypeDef error = USBH_FAIL; + USBH_StatusTypeDef error = USBH_FAIL; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; switch (MSC_Handle->hbot.cmd_state) { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ + /* Prepare the CBW and relevant field */ MSC_Handle->hbot.cbw.field.DataTransferLength = DATA_LEN_REQUEST_SENSE; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_IN; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; (void)USBH_memset(MSC_Handle->hbot.cbw.field.CB, 0, CBW_CB_LENGTH); - MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_REQUEST_SENSE; - MSC_Handle->hbot.cbw.field.CB[1] = (lun << 5); - MSC_Handle->hbot.cbw.field.CB[2] = 0U; - MSC_Handle->hbot.cbw.field.CB[3] = 0U; - MSC_Handle->hbot.cbw.field.CB[4] = DATA_LEN_REQUEST_SENSE; - MSC_Handle->hbot.cbw.field.CB[5] = 0U; + MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_REQUEST_SENSE; + MSC_Handle->hbot.cbw.field.CB[1] = (lun << 5); + MSC_Handle->hbot.cbw.field.CB[2] = 0U; + MSC_Handle->hbot.cbw.field.CB[3] = 0U; + MSC_Handle->hbot.cbw.field.CB[4] = DATA_LEN_REQUEST_SENSE; + MSC_Handle->hbot.cbw.field.CB[5] = 0U; MSC_Handle->hbot.state = BOT_SEND_CBW; MSC_Handle->hbot.cmd_state = BOT_CMD_WAIT; @@ -307,6 +307,13 @@ USBH_StatusTypeDef USBH_MSC_SCSI_RequestSense(USBH_HandleTypeDef *phost, sense_data->key = MSC_Handle->hbot.pbuf[2] & 0x0FU; sense_data->asc = MSC_Handle->hbot.pbuf[12]; sense_data->ascq = MSC_Handle->hbot.pbuf[13]; + + if (sense_data->asc == SCSI_ASC_MEDIUM_NOT_PRESENT) + { + USBH_UsrLog("MSC Device MEDIUM not present"); + error = USBH_UNRECOVERED_ERROR; + } + } break; @@ -341,24 +348,24 @@ USBH_StatusTypeDef USBH_MSC_SCSI_Write(USBH_HandleTypeDef *phost, { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ - MSC_Handle->hbot.cbw.field.DataTransferLength = length * MSC_Handle->unit[0].capacity.block_size; + /* Prepare the CBW and relevant field */ + MSC_Handle->hbot.cbw.field.DataTransferLength = length * MSC_Handle->unit[lun].capacity.block_size; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_OUT; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; (void)USBH_memset(MSC_Handle->hbot.cbw.field.CB, 0, CBW_CB_LENGTH); - MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_WRITE10; + MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_WRITE10; - /*logical block address*/ - MSC_Handle->hbot.cbw.field.CB[2] = (((uint8_t *)(void *)&address)[3]); - MSC_Handle->hbot.cbw.field.CB[3] = (((uint8_t *)(void *)&address)[2]); - MSC_Handle->hbot.cbw.field.CB[4] = (((uint8_t *)(void *)&address)[1]); - MSC_Handle->hbot.cbw.field.CB[5] = (((uint8_t *)(void *)&address)[0]); + /* Logical block address */ + MSC_Handle->hbot.cbw.field.CB[2] = (((uint8_t *)(void *)&address)[3]); + MSC_Handle->hbot.cbw.field.CB[3] = (((uint8_t *)(void *)&address)[2]); + MSC_Handle->hbot.cbw.field.CB[4] = (((uint8_t *)(void *)&address)[1]); + MSC_Handle->hbot.cbw.field.CB[5] = (((uint8_t *)(void *)&address)[0]); /*Transfer length */ - MSC_Handle->hbot.cbw.field.CB[7] = (((uint8_t *)(void *)&length)[1]); - MSC_Handle->hbot.cbw.field.CB[8] = (((uint8_t *)(void *)&length)[0]); + MSC_Handle->hbot.cbw.field.CB[7] = (((uint8_t *)(void *)&length)[1]); + MSC_Handle->hbot.cbw.field.CB[8] = (((uint8_t *)(void *)&length)[0]); MSC_Handle->hbot.state = BOT_SEND_CBW; @@ -394,31 +401,31 @@ USBH_StatusTypeDef USBH_MSC_SCSI_Read(USBH_HandleTypeDef *phost, uint8_t *pbuf, uint32_t length) { - USBH_StatusTypeDef error = USBH_FAIL; + USBH_StatusTypeDef error = USBH_FAIL; MSC_HandleTypeDef *MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; switch (MSC_Handle->hbot.cmd_state) { case BOT_CMD_SEND: - /*Prepare the CBW and relevant field*/ - MSC_Handle->hbot.cbw.field.DataTransferLength = length * MSC_Handle->unit[0].capacity.block_size; + /* Prepare the CBW and relevant field */ + MSC_Handle->hbot.cbw.field.DataTransferLength = length * MSC_Handle->unit[lun].capacity.block_size; MSC_Handle->hbot.cbw.field.Flags = USB_EP_DIR_IN; MSC_Handle->hbot.cbw.field.CBLength = CBW_LENGTH; (void)USBH_memset(MSC_Handle->hbot.cbw.field.CB, 0, CBW_CB_LENGTH); - MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_READ10; + MSC_Handle->hbot.cbw.field.CB[0] = OPCODE_READ10; - /*logical block address*/ - MSC_Handle->hbot.cbw.field.CB[2] = (((uint8_t *)(void *)&address)[3]); - MSC_Handle->hbot.cbw.field.CB[3] = (((uint8_t *)(void *)&address)[2]); - MSC_Handle->hbot.cbw.field.CB[4] = (((uint8_t *)(void *)&address)[1]); - MSC_Handle->hbot.cbw.field.CB[5] = (((uint8_t *)(void *)&address)[0]); + /* Logical block address */ + MSC_Handle->hbot.cbw.field.CB[2] = (((uint8_t *)(void *)&address)[3]); + MSC_Handle->hbot.cbw.field.CB[3] = (((uint8_t *)(void *)&address)[2]); + MSC_Handle->hbot.cbw.field.CB[4] = (((uint8_t *)(void *)&address)[1]); + MSC_Handle->hbot.cbw.field.CB[5] = (((uint8_t *)(void *)&address)[0]); - /*Transfer length */ - MSC_Handle->hbot.cbw.field.CB[7] = (((uint8_t *)(void *)&length)[1]); - MSC_Handle->hbot.cbw.field.CB[8] = (((uint8_t *)(void *)&length)[0]); + /* Transfer length */ + MSC_Handle->hbot.cbw.field.CB[7] = (((uint8_t *)(void *)&length)[1]); + MSC_Handle->hbot.cbw.field.CB[8] = (((uint8_t *)(void *)&length)[0]); MSC_Handle->hbot.state = BOT_SEND_CBW; diff --git a/Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c b/Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c index be85b60ba8..775bd4e7bf 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c +++ b/Middlewares/ST/STM32_USB_Host_Library/Core/Src/usbh_ctlreq.c @@ -444,6 +444,12 @@ static USBH_StatusTypeDef USBH_ParseCfgDesc(USBH_HandleTypeDef *phost, uint8_t * pdesc = (USBH_DescHeader_t *)(void *)buf; + /* Make sure that the Configuration descriptor's bLength is equal to USB_CONFIGURATION_DESC_SIZE */ + if (pdesc->bLength != USB_CONFIGURATION_DESC_SIZE) + { + pdesc->bLength = USB_CONFIGURATION_DESC_SIZE; + } + /* Parse configuration descriptor */ cfg_desc->bLength = *(uint8_t *)(buf + 0U); cfg_desc->bDescriptorType = *(uint8_t *)(buf + 1U); @@ -454,12 +460,6 @@ static USBH_StatusTypeDef USBH_ParseCfgDesc(USBH_HandleTypeDef *phost, uint8_t * cfg_desc->bmAttributes = *(uint8_t *)(buf + 7U); cfg_desc->bMaxPower = *(uint8_t *)(buf + 8U); - /* Make sure that the Configuration descriptor's bLength is equal to USB_CONFIGURATION_DESC_SIZE */ - if (cfg_desc->bLength != USB_CONFIGURATION_DESC_SIZE) - { - cfg_desc->bLength = USB_CONFIGURATION_DESC_SIZE; - } - if (length > USB_CONFIGURATION_DESC_SIZE) { ptr = USB_LEN_CFG_DESC; diff --git a/Middlewares/ST/STM32_USB_Host_Library/Release_Notes.html b/Middlewares/ST/STM32_USB_Host_Library/Release_Notes.html index 6d0cd9b957..3af60675f6 100644 --- a/Middlewares/ST/STM32_USB_Host_Library/Release_Notes.html +++ b/Middlewares/ST/STM32_USB_Host_Library/Release_Notes.html @@ -60,7 +60,49 @@

Purpose

Update History

- + +
+

Main Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Headline
Core
minor enhancement; Avoid infinite loop in case device descriptor length is wrongly set to zero
MSC Class
Add support of multi-LUN storage devices
Report error for non-ready media
Audio Class
Report error for unsupported audio sample rate
CDC Class
Ensure that only short packet or ZLP can stop receiving
+
+
+
+

Main Changes

@@ -104,7 +146,7 @@

Main Changes

- + diff --git a/Middlewares/Third_Party/FatFs/src/st_readme.txt b/Middlewares/Third_Party/FatFs/src/st_readme.txt index 6c1d38aac5..b499318dbe 100644 --- a/Middlewares/Third_Party/FatFs/src/st_readme.txt +++ b/Middlewares/Third_Party/FatFs/src/st_readme.txt @@ -22,6 +22,34 @@ ### V2.1.5/18-08-2023 ### ============================ + Add LICENSE.md file at the root directory. ++ Fix in disk_initialize() function, the "is_initialized" flag to be set 1 after checking the driver's return value. + - src\diskio.c + ++ Fix read/write sector size cast type in USBH_ioctl(). + - src\drivers\usbh_diskio_template.c + - src\drivers\usbh_diskio_dma_template.c + ++ Fix declaration of the "ret" parameter in SD_read() + - src\drivers\sd_diskio_dma_rtos_template_bspv1.c + ++ Set “ReadStatus†variable to zero before calling BSP_SD_ReadBlocks_DMA() + - src\drivers\sd_diskio_dma_template_bspv1.c + ++ Fix typo error in SD_Write() where READ_CPLT_MSG is used instead of WRITE_CPLT_MSG + - src\drivers\sd_diskio_dma_rtos_template_bspv1.c + - src\drivers\sd_diskio_dma_rtos_template_bspv2.c + ++ Use local variable to store function call return values + - src\drivers\sd_diskio_dma_template_bspv1.c + - src\drivers\sd_diskio_dma_template_bspv2.c + - src\drivers\sd_diskio_dma_rtos_template_bspv1.c + - src\drivers\sd_diskio_dma_rtos_template_bspv2.c + ++ Use 32-byte aligned scratch buffer, in SD_read() and SD_write, to match CPU cache alignment. + - src\drivers\sd_diskio_dma_template_bspv1.c + - src\drivers\sd_diskio_dma_template_bspv2.c + - src\drivers\sd_diskio_dma_rtos_template_bspv1.c + - src\drivers\sd_diskio_dma_rtos_template_bspv2.c ### V2.1.4/18-10-2019 ### ============================ diff --git a/Projects/Release_Notes.html b/Projects/Release_Notes.html index d9d0291169..ce5ebe53e1 100644 --- a/Projects/Release_Notes.html +++ b/Projects/Release_Notes.html @@ -47,10 +47,389 @@

Purpose

Update History

- +

Main Changes

    +
  • Applications MW LwIP +
      +
    • Fix Confusing comment in ethernet_if.
    • +
    • Fix Wrong use of DHCP API in application code & ethernet_link_thread() API.
    • +
    • Fix Ethernet low_level_init() API does not handle return code from LAN8742_init() API.
    • +
  • +
  • Examples I2C +
      +
    • Fix wrong check condition on HAL_TIMEOUT: this value is no longer returned by the HAL_I2C_IsDeviceReady() API.
    • +
  • +
+

Contents

+

Projects

+
Core
fix potential corruption of Endpoints MaxPacketSizeFix potential corruption of Endpoints MaxPacketSize
HID Class
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BoardProject categoryVersionPath
STM32469I-EVALDemonstrationsv1.28.1Projects/STM32469I-EVAL/Demonstrations
STM32469I-EVALApplicationsv1.28.1Projects/STM32469I-EVAL/Applications
STM32469I-EVALHAL Examplesv1.28.1Projects/STM32469I-EVAL/Examples
STM32469I-EVALHAL Templatesv1.28.1Projects/STM32469I-EVAL/Templates
STM32469I-EVALLL Templatesv1.28.1Projects/STM32469I-EVAL/Templates_LL
STM32469I-DiscoveryDemonstrationsv1.28.1Projects/STM32469I-Discovery/Demonstrations
STM32469I-DiscoveryApplicationsv1.28.1Projects/STM32469I-Discovery/Applications
STM32469I-DiscoveryHAL Examplesv1.28.1Projects/STM32469I-Discovery/Examples
STM32469I-DiscoveryHAL Templatesv1.28.1Projects/STM32469I-Discovery/Templates
STM32469I-DiscoveryLL Templatesv1.28.1Projects/STM32469I-Discovery/Templates_LL
STM32446E-EVALDemonstrationsv1.28.1Projects/STM32446E-EVAL/Demonstrations
STM32446E-EVALApplicationsv1.28.1Projects/STM32446E-EVAL/Applications
STM32446E-EVALHAL Examplesv1.28.1Projects/STM32446E-EVAL/Examples
STM32446E-EVALHAL Templatesv1.28.1Projects/STM32446E-EVAL/Templates
STM32446E-EVALLL Templatesv1.28.1Projects/STM32446E-EVAL/Templates_LL
STM324xG-EVALDemonstrationsv1.28.1Projects/STM324xG-EVAL/Demonstrations
STM324xG-EVALApplicationsv1.28.1Projects/STM324xG-EVAL/Applications
STM324xG-EVALHAL Examplesv1.28.1Projects/STM324xG-EVAL/Examples
STM324xG-EVALHAL Templatesv1.28.1Projects/STM324xG-EVAL/Templates
STM324xG-EVALLL Templatesv1.28.1Projects/STM324xG-EVAL/Templates_LL
STM32F4-DiscoveryDemonstrationsv1.28.1Projects/STM32F4-Discovery/Demonstrations
STM32F4-DiscoveryApplicationsv1.28.1Projects/STM32F4-Discovery/Applications
STM32F4-DiscoveryHAL Examplesv1.28.1Projects/STM32F4-Discovery/Examples
STM32F4-DiscoveryHAL Templatesv1.28.1Projects/STM32F4-Discovery/Templates
STM32F4-DiscoveryLL Templatesv1.28.1Projects/STM32F4-Discovery/Templates_LL
STM32F401-DiscoveryApplicationsv1.28.1Projects/STM32F401-Discovery/Applications
STM32F401-DiscoveryHAL Examplesv1.28.1Projects/STM32F401-Discovery/Examples
STM32F401-DiscoveryDemonstrationsv1.28.1Projects/STM32F401-Discovery/Demonstrations
STM32F401-DiscoveryHAL Templatesv1.28.1Projects/STM32F401-Discovery/Templates
STM32F401-DiscoveryLL Templatesv1.28.1Projects/STM32F401-Discovery/Templates_LL
STM32F429I-DiscoveryDemonstrationsv1.28.1Projects/STM32F429I-Discovery/Demonstrations
STM32F429I-DiscoveryApplicationsv1.28.1Projects/STM32F429I-Discovery/Applications
STM32F429I-DiscoveryHAL Examplesv1.28.1Projects/STM32F429I-Discovery/Examples
STM32F429I-DiscoveryHAL Templatesv1.28.1Projects/STM32F429I-Discovery/Templates
STM32F429I-DiscoveryLL Templatesv1.28.1Projects/STM32F429I-Discovery/Templates_LL
STM32412G-DiscoveryDemonstrationsv1.28.1Projects/STM32412G-Discovery/Demonstrations
STM32412G-DiscoveryApplicationsv1.28.1Projects/STM32412G-Discovery/Applications
STM32412G-DiscoveryHAL Examplesv1.28.1Projects/STM32412G-Discovery/Examples
STM32412G-DiscoveryHAL Templatesv1.28.1Projects/STM32412G-Discovery/Templates
STM32412G-DiscoveryLL Templatesv1.28.1Projects/STM32412G-Discovery/Templates_LL
STM32F413H-DiscoveryDemonstrationsv1.28.1Projects/STM32F413H-Discovery/Demonstrations
STM32F413H-DiscoveryApplicationsv1.28.1Projects/STM32F413H-Discovery/Applications
STM32F413H-DiscoveryHAL Examplesv1.28.1Projects/STM32F413H-Discovery/Examples
STM32F413H-DiscoveryHAL Templatesv1.28.1Projects/STM32F413H-Discovery/Templates
STM32F413H-DiscoveryLL Templatesv1.28.1Projects/STM32F413H-Discovery/Templates_LL
+


+

+

Known Limitations

+
    +
  • USB_Device_Standalone application for STM324x9I_EVAL +
      +
    • MDK-ARM and STM32CubeIDE projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
    • +
  • +
  • STemWin demonstration for STM32F413H-Discovery +
      +
    • Issue on audio recorder module with MDK-ARM, to be fixed for next releases.
    • +
  • +
  • The following STM32CubeIDE projects include only Release configuration : +
      +
    • STM32446E_EVAL/Demonstrations/STemWin
    • +
    • STM324x9I_EVAL/Demonstrations/STemWin
    • +
    • STM324xG_EVAL/Demonstrations/STemWin
    • +
    • STM324x9I_EVAL/Applications/FatFs/FatFs_MultiDrives
    • +
    • STM324x9I_EVAL/Applications/FatFs/FatFs_uSD
    • +
    • STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives
    • +
    • STM324xG_EVAL/Applications/FatFs/FatFs_uSD
    • +
    • STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone
    • +
    • STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone
    • +
  • +
  • The following STM32CubeIDE projects include only Debug configuration : +
      +
    • STM32469I_EVAL/Applications/Display/LCD_DSI_ImagesSlider
    • +
  • +
  • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
  • +
+

Development Toolchains and Compilers

+ + + + + + + + + + + + + + + + + + + + + + +
Development Toolchains :
NameVersion
IAR Embedded Workbench for ARM (EWARM)toolchainV8.50.9
RealView Microcontroller DevelopmentKit (MDK-ARM) toolchainV5.36
STM32CubeIDE toolchainV1.15.0
+

Supported Devices and EVAL boards

+
    +
  • STM32F469xx/479xx devices STM32469I_EVAL board RevC
  • +
  • STM32F469xx and STM32469I-Discovery board RevC
  • +
  • STM32F410xx and STM32F410xx-Nucleo board RevC
  • +
  • STM32F446xx devices STM32446E_EVAL board RevB
  • +
  • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
  • +
  • STM32F429xx and STM32F429I-Discovery board RevB
  • +
  • STM32F407xx/417xx devices and STM324xG-EVAL board RevC
  • +
  • STM32F407xx and STM32F4-Discovery board RevC
  • +
  • STM32F401xC and STM32F401C-Discovery board RevB
  • +
  • STM32F401xE and STM32F401RE-Nucleo board RevC
  • +
  • STM32F411xE and STM32F411RE-Nucleo board RevC
  • +
  • STM32F411xE and STM32F411E-Discovery board RevB
  • +
  • STM32F412ZG and STM32F412ZG-Discovery board RevD
  • +
  • STM32F446ZE and STM32F446ZE-Nucleo board RevB
  • +
  • STM32F429ZI and STM32F429ZI-Nucleo board RevB
  • +
  • STM32F412ZG and STM32F412ZG-Nucleo board RevB
  • +
  • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
  • +
  • STM32F413ZHT6U and STM32F413H-Discovery board RevD
  • +
+

Backward Compatibility

+

None

+
+
+
+ +
+

Main Changes

+
  • Deploy the support of STM32CubeIDE toolchain on all projects.
    • SW4STM32 toolchain support is discontinued.
    • @@ -65,8 +444,8 @@

      Main Changes

    • Improve USB transmit data throughput in MSC_Standalone, CDC_Standalone and CustomHID_Standalone USB device applications.
    • Disable Time and Date options for mbedTLS applications.
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -351,7 +730,7 @@

    Projects


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -379,7 +758,7 @@

        Known Limitations

    • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -403,7 +782,7 @@

    Development Toolchains and Compile

    Development Toolchains :
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevC
    • @@ -424,19 +803,19 @@

      Supported Devices and EVAL boards

      STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

-

Main Changes

+

Main Changes

  • General update to align firmware projects with the new HAL ETH driver
-

Contents

-

Projects

+

Contents

+

Projects

@@ -722,7 +1101,7 @@

Projects

Projects :


-

Known Limitations

+

Known Limitations

  • USB_Device_Standalone application for STM324x9I_EVAL
      @@ -733,7 +1112,7 @@

      Known Limitations

    • Issue on audio recorder module with MDK-ARM, to be fixed for next releases.
-

Development Toolchains and Compilers

+

Development Toolchains and Compilers

@@ -757,7 +1136,7 @@

Development Toolchains and Compi

Development Toolchains :
-

Supported Devices and EVAL boards

+

Supported Devices and EVAL boards

  • STM32F469xx/479xx devices STM32469I_EVAL board RevC
  • STM32F469xx and STM32469I-Discovery board RevC
  • @@ -778,14 +1157,14 @@

    Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
  • STM32F413ZHT6U and STM32F413H-Discovery board RevD
-

Backward Compatibility

+

Backward Compatibility

None

-

Main Changes

+

Main Changes

  • Updated license for all projects file sources.
  • Add UART example showing use of HAL UART enhanced reception services (ReceptionToIdle) API for STM32446E-Nucleo and STM32F429ZI-Nucleo boards.
  • @@ -800,8 +1179,8 @@

    Main Changes

  • Update Demo, applications and examples to support new LCD controller component NT35510.
-

Contents

-

Projects

+

Contents

+

Projects

@@ -1087,7 +1466,7 @@

Projects

Projects :


-

Known Limitations

+

Known Limitations

  • USB_Device_Standalone application for STM324x9I_EVAL
      @@ -1098,7 +1477,7 @@

      Known Limitations

    • Issue on audio recorder module with MDK-ARM, to be fixed for next releases.
-

Development Toolchains and Compilers

+

Development Toolchains and Compilers

@@ -1122,7 +1501,7 @@

Development Toolchains and Compi

Development Toolchains :
-

Supported Devices and EVAL boards

+

Supported Devices and EVAL boards

  • STM32F469xx/479xx devices STM32469I_EVAL board RevC
  • STM32F469xx and STM32469I-Discovery board RevC
  • @@ -1143,14 +1522,14 @@

    Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
  • STM32F413ZHT6U and STM32F413H-Discovery board RevD
-

Backward Compatibility

+

Backward Compatibility

None

-

Main Changes

+

Main Changes

  • USB Applications Impact:
      @@ -1172,8 +1551,8 @@

      Main Changes

    • Remove dhcp_stop() call in the net_sockets.c
-

Contents

-

Projects

+

Contents

+

Projects

@@ -1459,7 +1838,7 @@

Projects

Projects :


-

Known Limitations

+

Known Limitations

  • USB_Device_Standalone application for STM324x9I_EVAL
      @@ -1471,7 +1850,7 @@

      Known Limitations

  • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
-

Development Toolchains and Compilers

+

Development Toolchains and Compilers

@@ -1495,7 +1874,7 @@

Development Toolchains and Compi

Development Toolchains :
-

Supported Devices and EVAL boards

+

Supported Devices and EVAL boards

  • STM32F469xx/479xx devices STM32469I_EVAL board RevC
  • STM32F469xx and STM32469I-Discovery board RevB
  • @@ -1516,14 +1895,14 @@

    Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
  • STM32F413ZHT6U and STM32F413H-Discovery board RevD
-

Backward Compatibility

+

Backward Compatibility

None

-

Main Changes

+

Main Changes

  • Update HAL CRYP examples to be aligned with new HAL CRYP drivers
  • Update HAL I2C examples to be compliant with new I2C API
  • @@ -1559,8 +1938,8 @@

    Main Changes

  • Update FreeRTOS MPU applications by adding stream_buffer.c file in project source files to avoid compilation error with MDK-ARM
  • For the complete list of changes, please refer to the release notes of each firmware component
-

Contents

-

Projects

+

Contents

+

Projects

@@ -1846,7 +2225,7 @@

Projects

Projects :


-

Known Limitations

+

Known Limitations

  • USB_Device_Standalone application for STM324x9I_EVAL
      @@ -1858,7 +2237,7 @@

      Known Limitations

  • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
-

Development Toolchains and Compilers

+

Development Toolchains and Compilers

@@ -1882,7 +2261,7 @@

Development Toolchains and Compi

Development Toolchains :
-

Supported Devices and EVAL boards

+

Supported Devices and EVAL boards

  • STM32F469xx/479xx devices STM32469I_EVAL board RevC
  • STM32F469xx and STM32469I-Discovery board RevB
  • @@ -1903,14 +2282,14 @@

    Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
  • STM32F413ZHT6U and STM32F413H-Discovery board RevD
-

Backward Compatibility

+

Backward Compatibility

None

-

Main Changes

+

Main Changes

  • Add new STemWin applications and demonstrations and TouchGFX demonstrations for STM32F4x9I_EVAL, STM32F429I-Discovery, STM32F469_EVAL and STM32F469-Discovery platforms.

  • Update applications to refer to the new PDM libraries:

  • @@ -1924,9 +2303,9 @@

    Main Changes

  • libPDMFilter_CM4_Keil.lib updated and renamed to libPDMFilter_CM4_Keil_wc16.lib for MDK-ARM projects.
  • For the complete list of changes, please refer to the release notes of each firmware component

  • - -

    Contents

    -

    Projects

    + +

    Contents

    +

    Projects

    @@ -2272,7 +2651,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -2288,7 +2667,7 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -2311,7 +2690,7 @@

    Development Toolchains and Compi

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -2332,7 +2711,7 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    Dependencies

    None

    @@ -2341,14 +2720,14 @@

    Dependencies

    -

    Main Changes

    +

    Main Changes

    Maintenance release

    • Add new STemWin applications for STM32F4x9I_EVAL, STM32F429I-Discovery, STM32F469_EVAL and STM32F469-Discovery platforms.
    • For the complete list of changes, please refer to the release notes of each firmware component.
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -2694,7 +3073,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -2707,7 +3086,7 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -2731,7 +3110,7 @@

    Development Toolchains and Compi

    Development Toolchains :
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -2752,21 +3131,21 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Update CAN examples to support new HAL CAN driver

    • Update FatFs projects to be aligned with new FatFs stack

    • Update LwIP projects to be aligned with new LwIP stack V2.0.3

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -3112,7 +3491,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -3125,7 +3504,7 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -3148,7 +3527,7 @@

    Development Toolchains and Compi

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -3169,21 +3548,21 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Update projects to support new FatFs and STemWin versions

    • Add new FreeRTOS MPU application

    • Fix Linux compilation errors

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -3529,7 +3908,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -3542,7 +3921,7 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -3565,7 +3944,7 @@

    Development Toolchains and Compi

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -3586,14 +3965,14 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Add Examples, Applications and Demonstrations firmware for STM32F413H-Discovery board

    • Add Low Layer examples and MIX examples on the STM32F410xx-Nucleo, STM32F429ZI-Nucleo and STM32F411REx-Nucleo boards

    • @@ -3601,8 +3980,8 @@

      Main Changes

    • Update overall projects to be aligned with latest version of HAL, BSP and Middleware drivers

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -3918,7 +4297,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -3926,7 +4305,7 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -3953,7 +4332,7 @@

    Development Toolchains and Compi

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -3974,22 +4353,22 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Add 68 projects for STM32F413ZH-Nucleo board

    • General updates to fix known defects and enhancements implementation

    • Update overall projects for alignment with changes done in latest version of CMSIS device

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -4305,7 +4684,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -4314,7 +4693,7 @@

        Known Limitations

      • TrueSTUDIO and SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
      • STemWin sample demo applications with all STM32 platforms are not fully functional with MDK-ARM toolchain: the application doesn t run successfully after the second hit of the Hide Button. in fact when presing the button again while the progress bar displays the next steps, pressing Hide or Next Buttons are not working anymore.
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      @@ -4341,7 +4720,7 @@

      Development Toolchains and Comp

      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevB
      • @@ -4361,22 +4740,22 @@

        Supported Devices and EVAL boards<
      • STM32F412ZG and STM32F412ZG-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      -

      Backward Compatibility

      +

      Backward Compatibility

      None

    -

    Main Changes

    +

    Main Changes

    • General updates to fix known defects and enhancements implementation

    • Update applications and demonstrations related to STemWin library in order to support the latest STemWin version

    • Add new demonstration for STM32F412G-Discovery

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -4692,14 +5071,14 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
    • MDK-ARM and TrueSTUDIO projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
    • TrueSTUDIO and SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    • STemWin sample demo applications with all STM32 platforms are not fully functional with MDK-ARM toolchain: the application doesn t run successfully after the second hit of the Hide Button. in fact when presing the button again while the progress bar displays the next steps, pressing Hide or Next Buttons are not working anymore.
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -4726,7 +5105,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -4746,14 +5125,14 @@

      Supported Devices and EVAL boards<
    • STM32F412ZG and STM32F412ZG-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • General updates to fix known defects and enhancements implementation

    • Add QSPI_PreInitConfig example on STM32446E-EVAL, STM32469I-EVAL and STM32469I-Discovery boards

    • @@ -4762,8 +5141,8 @@

      Main Changes

    • Projects are updated following changes in latest version of HAL and Middlewares

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -5079,14 +5458,14 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
    • MDK-ARM and TrueSTUDIO projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    • The STM32F412G-Discovery demonstration firmware is not part of this firmware package. It will be added in the next release.
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -5113,7 +5492,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5132,14 +5511,14 @@

      Supported Devices and EVAL boards<
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    • STM32F412ZG and STM32F412ZG-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • General updates to fix known defects and enhancements implementation

    • Update HAL_TimeBase example to use the new HAL timebase template

    • @@ -5147,8 +5526,8 @@

      Main Changes

    • The FreeRTOS_LowPower application is removed comparing to STM32CubeF4 firmware package V1.10.0: this application will be reworked and will be supported in future release

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -5464,7 +5843,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -5472,7 +5851,7 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -5499,7 +5878,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5516,14 +5895,14 @@

      Supported Devices and EVAL boards<
    • STM32F446ZE and STM32F446ZE-Nucleo board RevB
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • General updates to fix known defects and enhancements implementation
    • Add EEPROM emulation application on all supported boards
    • @@ -5532,8 +5911,8 @@

      Main Changes

    • Remove reference to TASKING toolchain
    • For the complete list of changes, please refer to the release notes of each firmware component
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -5789,7 +6168,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -5797,7 +6176,7 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -5824,7 +6203,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5841,14 +6220,14 @@

      Supported Devices and EVAL boards<
    • STM32F446ZE and STM32F446ZE-Nucleo board RevB
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Update SW4STM32 projects
    • Fix in accordance with latest version of SW4STM32 toolchain
    • @@ -5866,8 +6245,8 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component
  • -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -6123,7 +6502,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -6131,7 +6510,7 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -6158,7 +6537,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -6172,14 +6551,14 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Add Examples, Applications and Demonstration firmware for STM32F469xx/STM32F479xx devices and STM32469I_EVAL/STM32469I-Discovery boards
    • Add Examples for STM32410xx_Nucleo board (14 in total)
    • @@ -6189,8 +6568,8 @@

      Main Changes

    • Note: Demonstration Firmware for STM32469I_EVAL and STM32469I-Discovery, provided within this package, doesn t embed TouchGFX demonstration module. Free evaluation version of the TouchGFX demonstration, based on Draupner Graphics commercial graphic library, is available at www.touchgfx.com/stmicroelectronics
    • For the complete list of changes, please refer to the release notes of each firmware components
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -6446,7 +6825,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -6457,7 +6836,7 @@

        Known Limitations

      • TrueSTUDIO project is not provided
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -6484,7 +6863,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -6498,14 +6877,14 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Add Examples for STM32446E_Nucleo board (11 in total)
    • Add the support System Workbench for STM32 (SW4STM32) toolchain for STM32446E_EVAL board projects
    • @@ -6514,8 +6893,8 @@

      Main Changes

    • Add the support of new 5.7 LCD reference for STM32F4x9I-EVAL
    • For the complete list of changes, please refer to the release notes of each firmware components
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -6771,7 +7150,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -6799,7 +7178,7 @@

        Known Limitations

      • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -6826,7 +7205,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -6838,7 +7217,7 @@

      Supported Devices and EVAL boards<
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    • STM32F446RE and STM32446E-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    Dependencies

    None

    @@ -6847,7 +7226,7 @@

    Dependencies

    -

    Main Changes

    +

    Main Changes

    Maintenance release

    • FLASH_EraseProgram example: update to reset data and instruction cash memories after flash erase
    • @@ -6856,8 +7235,8 @@

      Maintenance release

    • Demonstration for STM32F401-Discovery and STM32F4-Discovery boards: fix issue of wrong behavior after the second press on user button
    • Fix compile issue in some projects (9 in total), mainly due to bad project settings
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -7022,7 +7401,7 @@

    Projects

    Projects :

     

    -

    Known Limitations

    +

    Known Limitations

    • SW4STM32 projects are not provided for STM32446E_EVAL board, will be added in next release
    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release: @@ -7054,7 +7433,7 @@

      Known Limitations

    • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -7081,7 +7460,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -7092,14 +7471,14 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • Add Examples, Applications and Demonstration firmware for STM32F446xx devices and STM32446E_EVAL board
    • All projects updated following changes in latest version of HAL and Middlewares
    • @@ -7111,8 +7490,8 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware components
  • -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -7308,7 +7687,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -7339,7 +7718,7 @@

        Known Limitations

      • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -7366,7 +7745,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -7377,14 +7756,14 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    • All projects updated following changes in latest version of HAL and Middlewares
    • Miscellaneous enhancements and bugs fix
    • @@ -7397,8 +7776,8 @@

      Main Changes

    • Important note: some of MDK-ARM projects was created with v4.73, and others with v5.10 (mainly for STM32F411RE-Nucleo projects). If you are using MDK-ARM v5.10 (and later) you have to install a legacy patch to be able to open projects built with v4.73, here is the download link
    • For the complete list of changes, please refer to the release notes of each firmware components
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -7564,7 +7943,7 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -7587,7 +7966,7 @@

        Known Limitations

      • TrueSTUDIO project is not provided
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -7614,7 +7993,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • STM32F429xx and STM32F429I-Discovery board RevB
    • @@ -7624,7 +8003,7 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    Dependencies

    None

    @@ -7633,7 +8012,7 @@

    Dependencies

    -

    Main Changes

    +

    Main Changes

    • All projects updated following changes in latest version of HAL, BSP and Middlewares
    • Add examples for JPEG images encoding and decoding, based on LibJPEG, for STM324x9I_EVAL, STM324xG_EVAL and STM32F429I-Discovery (under <BoardName>)
    • @@ -7644,8 +8023,8 @@

      Main Changes

    • For the complete list of changes, please refer to the release notes of each board Examples, Applications and Demonstrations
    • Important note: some of MDK-ARM projects was created with v4.73, and others with v5.10 (mainly for STM32F411RE-Nucleo projects). If you are using MDK-ARM v5.10 (and later) you have to install a legacy patch to be able to open projects built with v4.73, here is the download link
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    Projects :

    @@ -7811,7 +8190,7 @@

    Projects

    -

    Known Limitations

    +

    Known Limitations

    • PolarSSL applications for STM324x9I_EVAL and STM324xG_EVAL
        @@ -7828,7 +8207,7 @@

        Known Limitations

      • STM324x9I-EVAL, STM324xG-EVAL and STM32F429I-Discovery demonstration
      • TrueSTUDIO project is not provided
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      @@ -7855,7 +8234,7 @@

      Development Toolchains and Comp

      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
      • STM32F429xx and STM32F429I-Discovery board RevB
      • @@ -7865,22 +8244,22 @@

        Supported Devices and EVAL boards<
      • STM32F401xE and STM32F401RE-Nucleo board RevC
      • STM32F411xE and STM32F411RE-Nucleo board RevC
      -

      Backward Compatibility

      +

      Backward Compatibility

      None

    -

    Main Changes

    +

    Main Changes

    • Add sources of STM324x9I-EVAL (both references MB1046 and MB1063), STM324xG-EVAL and STM32F429I-Discovery Demonstration (only for EWARM and MDK-ARM)
    • Media sample files (.jpg and .emf) to be used with the demonstration are provided under Utilities
    • Use updated version of STemWin V5.22
    • Miscellaneous update on Examples, Applications, Demonstrations and Templates projects for some boards; for more details refer to the associated release notes
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -8046,11 +8425,11 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • TrueSTUDIO projects are not provided for few Applications and Demonstrations (10 in total)
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -8073,7 +8452,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • STM32F429xx and STM32F429I-Discovery board RevB
    • @@ -8082,20 +8461,20 @@

      Supported Devices and EVAL boards<
    • STM32F401xC and STM32F401-Discovery board RevB
    • STM32F401xE and STM32F4xx-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    -

    Main Changes

    +

    Main Changes

    Maintenance release

    • First official release
    -

    Contents

    -

    Projects

    +

    Contents

    +

    Projects

    @@ -8261,13 +8640,13 @@

    Projects

    Projects :


    -

    Known Limitations

    +

    Known Limitations

    • STM324x9I-EVAL, STM324xG-EVAL and STM32F429I-Discovery Demonstrations sources will be provided in V1.1.0 release planned very soon
    • TrueSTUDIO projects are not provided for few Examples and Applications (7 in total)
    • MDK-ARM projects are not provided for 2 Applications (2 in total)
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    @@ -8290,7 +8669,7 @@

    Development Toolchains and Comp

    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • STM32F407xx/417xx devices and STM324xG-EVAL board RevC
    • @@ -8299,7 +8678,7 @@

      Supported Devices and EVAL boards<
    • STM32F429xx and STM32F429I-Discovery board RevB
    • STM32F401xE and STM32F4xx-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    None

    diff --git a/Projects/STM32446E-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Templates/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Templates/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Templates/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Templates/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E-Nucleo/Templates_LL/STM32CubeIDE/STM32F446RETX_FLASH.ld b/Projects/STM32446E-Nucleo/Templates_LL/STM32CubeIDE/STM32F446RETX_FLASH.ld index 0c1a4f1dd6..ae15f32ab1 100644 --- a/Projects/STM32446E-Nucleo/Templates_LL/STM32CubeIDE/STM32F446RETX_FLASH.ld +++ b/Projects/STM32446E-Nucleo/Templates_LL/STM32CubeIDE/STM32F446RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 33e1b9b262..8da09cb4c1 100644 --- a/Projects/STM32446E_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32446E_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 33e1b9b262..8da09cb4c1 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 968857a347..11efb73ce9 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 69c7cd6c38..f32c4d79f2 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 69c7cd6c38..f32c4d79f2 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 69c7cd6c38..f32c4d79f2 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 6d79a891c5..f75c4e9664 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 69c7cd6c38..f32c4d79f2 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 69c7cd6c38..f32c4d79f2 100644 --- a/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index 9cb395c5ce..46cc5e358f 100644 --- a/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ - + @@ -166,13 +85,6 @@ - - - - - - - - - + + \ No newline at end of file diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld index dd7e851e95..be04c997a5 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c index 4b9877c395..c699d21a97 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -157,7 +157,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c index 07795f5fc9..34c6467ef7 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c @@ -144,36 +144,6 @@ void SysTick_Handler(void) /* file (startup_stm32f4xx.s). */ /******************************************************************************/ -/** - * @brief This function handles DMA2 Stream 3 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** - * @brief This function handles SDIO interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @} diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h index b89da3798f..6889ebdf1f 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h @@ -179,6 +179,16 @@ The STM32F4xx allows computing and verifying the IP, UDP, TCP and ICMP checksums /* --------------------------------- + ---------- LWIP_NETIF_API options ---------- + ------------------------------------ +*/ +/** + * LWIP_NETIF_API==1: Enable NETIF API + */ +#define LWIP_NETIF_API 1 + +/* + ------------------------------------ ---------- OS options ---------- --------------------------------- */ diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld index b29fa6e8f5..a5414a9654 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c index c49b5b6dd7..beb5b80da7 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c @@ -26,6 +26,7 @@ #ifdef USE_LCD #include "lcd_log.h" #endif +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ @@ -106,7 +107,7 @@ void DHCP_Thread(void const * argument) BSP_LED_Off(LED1); BSP_LED_Off(LED2); #endif - dhcp_start(netif); + netifapi_dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS: @@ -136,7 +137,7 @@ void DHCP_Thread(void const * argument) IP_ADDR4(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + netifapi_netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); #ifdef USE_LCD sprintf((char *)iptxt, "%s", ip4addr_ntoa(netif_ip4_addr(netif))); diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c index 1e66889f77..85358deec1 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c @@ -26,11 +26,14 @@ #include "ethernetif.h" #include "../Components/dp83848/dp83848.h" #include +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT ( osWaitForever ) +/* Time to block waiting for transmissions to finish */ +#define ETHIF_TX_TIMEOUT (2000U) /* Stack size of the interface thread */ #define INTERFACE_THREAD_STACK_SIZE ( 512 ) @@ -47,7 +50,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -181,7 +184,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } PHYLinkState = DP83848_GetLinkState(&DP83848); @@ -276,13 +284,29 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p) pbuf_ref(p); - HAL_ETH_Transmit_IT(&EthHandle, &TxConfig); - - while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + do { - } - - HAL_ETH_ReleaseTxPacket(&EthHandle); + if(HAL_ETH_Transmit_IT(&EthHandle, &TxConfig) == HAL_OK) + { + errval = ERR_OK; + } + else + { + if(HAL_ETH_GetError(&EthHandle) & HAL_ETH_ERROR_BUSY) + { + /* Wait for descriptors to become available */ + osSemaphoreWait( TxPktSemaphore, ETHIF_TX_TIMEOUT); + HAL_ETH_ReleaseTxPacket(&EthHandle); + errval = ERR_BUF; + } + else + { + /* Other error */ + pbuf_free(p); + errval = ERR_IF; + } + } + }while(errval == ERR_BUF); return errval; } @@ -644,8 +668,8 @@ void ethernet_link_thread( void const * argument ) if(netif_is_link_up(netif) && (PHYLinkState <= DP83848_STATUS_LINK_DOWN)) { HAL_ETH_Stop_IT(&EthHandle); - netif_set_down(netif); - netif_set_link_down(netif); + netifapi_netif_set_down(netif); + netifapi_netif_set_link_down(netif); } else if(!netif_is_link_up(netif) && (PHYLinkState > DP83848_STATUS_LINK_DOWN)) { @@ -683,8 +707,8 @@ void ethernet_link_thread( void const * argument ) MACConf.Speed = speed; HAL_ETH_SetMACConfig(&EthHandle, &MACConf); HAL_ETH_Start_IT(&EthHandle); - netif_set_up(netif); - netif_set_link_up(netif); + netifapi_netif_set_up(netif); + netifapi_netif_set_link_up(netif); } } diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c index 1ab218d11e..e687771c57 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -157,7 +157,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c index ab06bbc09e..f651d720ff 100644 --- a/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c +++ b/Projects/STM324x9I_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -157,7 +157,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index fb8825565e..e37de21378 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index fb8825565e..e37de21378 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index a70baea21a..478dc2b852 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index f32ba88627..2c6f310b63 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 597a288bfa..82242deadd 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 840babd5c6..b3beb476d9 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 5da8dedf7d..300e1b8cf9 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index f7048408bd..7fa01b6276 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c b/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c index 6ebf84c3b1..28532033db 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c @@ -154,36 +154,6 @@ void OTG_HS_IRQHandler(void) HAL_HCD_IRQHandler(&hhcd); } -/** - * @brief This function handles DMA2 Stream 3 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** - * @brief This function handles SDIO interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @brief This function handles External line 9_5 interrupt request. * @param None diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 590ad6b952..e5ca580164 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/.cproject b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/.cproject index 7f6bd15985..640bbb1c3e 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/.cproject +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/.cproject @@ -1,89 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -163,90 +80,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -327,89 +160,6 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index eb28a0e84b..5180df734e 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c index 6b9cc167bb..b44d439524 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c @@ -261,7 +261,7 @@ void AUDIO_PlaybackProbeKey(JOYState_TypeDef state) static AUDIO_ErrorTypeDef AUDIO_GetFileInfo(uint16_t file_idx, WAV_InfoTypedef * info) { - uint8_t str[FILEMGR_FILE_NAME_SIZE + 20]; + uint8_t str[FILEMGR_FILE_NAME_SIZE + 30]; uint32_t bytesread; uint32_t duration; diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c index 6d46d5c971..58210084a6 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c @@ -154,36 +154,6 @@ void OTG_HS_IRQHandler(void) HAL_HCD_IRQHandler(&hhcd); } -/** - * @brief This function handles DMA2 Stream 3 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** - * @brief This function handles SDIO interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @brief This function handles External line 2 interrupt request. * @param None diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index c494a280a8..12be0451a8 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld index d93546c43d..3c4e8959e3 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 76d8e40f32..a77aef7915 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld index de82a1e4ef..562c309106 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld index d93546c43d..3c4e8959e3 100644 --- a/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F439NIHX_FLASH.ld index 2374d1a006..003a05cba8 100644 --- a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c index 33225525c7..17d972585e 100644 --- a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c +++ b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c @@ -15,7 +15,7 @@ * ****************************************************************************** */ - + #include "mbedtls_config.h" #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT @@ -23,28 +23,72 @@ #include "main.h" #include +#include "mbedtls/entropy.h" #include "mbedtls/entropy_poll.h" -extern RNG_HandleTypeDef RngHandle; +static __IO uint32_t isInitialized = 0; + +static RNG_HandleTypeDef RNG_Handle; -int mbedtls_hardware_poll( void *Data, unsigned char *Output, size_t Len, size_t *oLen ) +static void RNG_Init(void); +/* RNG init function */ +static void RNG_Init(void) { - uint32_t index; - uint32_t randomValue; - - for (index = 0; index < Len/4; index++) + if (isInitialized == 0) { - if (HAL_RNG_GenerateRandomNumber(&RngHandle, &randomValue) == HAL_OK) + RNG_Handle.Instance = RNG; + /* DeInitialize the RNG peripheral */ + if (HAL_RNG_DeInit(&RNG_Handle) != HAL_OK) { - *oLen += 4; - memset(&(Output[index * 4]), (int)randomValue, 4); + return; } - else + /* Initialize the RNG peripheral */ + if (HAL_RNG_Init(&RNG_Handle) != HAL_OK) { - Error_Handler(); + return; } + isInitialized = 1; + } +} + +int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen) +{ + __IO uint8_t random_value[4]; + int ret = 0; + + RNG_Init(); + + if (isInitialized == 0) + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; } - - return 0; + else + { + *oLen = 0; + while ((*oLen < Len) && (ret == 0)) + { + if (HAL_RNG_GenerateRandomNumber(&RNG_Handle, (uint32_t *)random_value) == HAL_OK) + { + for (uint8_t i = 0; (i < sizeof(uint32_t)) && (*oLen < Len) ; i++) + { + Output[*oLen] = random_value[i]; + *oLen += 1; + } + } + else + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + } + + /* Just be extra sure that we didn't do it wrong */ + if (__HAL_RNG_GET_FLAG(&RNG_Handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) != 0) + { + *oLen = 0; + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + } + + return ret; } #endif /*MBEDTLS_ENTROPY_HARDWARE_ALT*/ diff --git a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F439NIHX_FLASH.ld index 2374d1a006..003a05cba8 100644 --- a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c index abb79eb201..17d972585e 100644 --- a/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c +++ b/Projects/STM324x9I_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c @@ -16,7 +16,6 @@ ****************************************************************************** */ - #include "mbedtls_config.h" #ifdef MBEDTLS_ENTROPY_HARDWARE_ALT @@ -24,29 +23,72 @@ #include "main.h" #include +#include "mbedtls/entropy.h" #include "mbedtls/entropy_poll.h" -extern RNG_HandleTypeDef RngHandle; +static __IO uint32_t isInitialized = 0; + +static RNG_HandleTypeDef RNG_Handle; -int mbedtls_hardware_poll( void *Data, unsigned char *Output, size_t Len, size_t *oLen ) +static void RNG_Init(void); +/* RNG init function */ +static void RNG_Init(void) { - uint32_t index; - uint32_t randomValue; - - for (index = 0; index < Len/4; index++) + if (isInitialized == 0) { - if (HAL_RNG_GenerateRandomNumber(&RngHandle, &randomValue) == HAL_OK) + RNG_Handle.Instance = RNG; + /* DeInitialize the RNG peripheral */ + if (HAL_RNG_DeInit(&RNG_Handle) != HAL_OK) { - *oLen += 4; - memset(&(Output[index * 4]), (int)randomValue, 4); + return; } - else + /* Initialize the RNG peripheral */ + if (HAL_RNG_Init(&RNG_Handle) != HAL_OK) { - Error_Handler(); + return; } + isInitialized = 1; } - - return 0; } +int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen) +{ + __IO uint8_t random_value[4]; + int ret = 0; + + RNG_Init(); + + if (isInitialized == 0) + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + else + { + *oLen = 0; + while ((*oLen < Len) && (ret == 0)) + { + if (HAL_RNG_GenerateRandomNumber(&RNG_Handle, (uint32_t *)random_value) == HAL_OK) + { + for (uint8_t i = 0; (i < sizeof(uint32_t)) && (*oLen < Len) ; i++) + { + Output[*oLen] = random_value[i]; + *oLen += 1; + } + } + else + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + } + + /* Just be extra sure that we didn't do it wrong */ + if (__HAL_RNG_GET_FLAG(&RNG_Handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) != 0) + { + *oLen = 0; + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + } + + return ret; +} #endif /*MBEDTLS_ENTROPY_HARDWARE_ALT*/ diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/BSP/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/BSP/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/BSP/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/BSP/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESCCM_IT/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESCCM_IT/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESCCM_IT/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESCCM_IT/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESGCM/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESGCM/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESGCM/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESGCM/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 81e3a3c5d0..f5c9991e08 100644 --- a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -88,13 +88,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -102,7 +104,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -111,7 +113,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -121,7 +123,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_RegToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_RegToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_RegToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/DMA2D/DMA2D_RegToMemWithLCD/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_DualBoot/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_DualBoot/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_DualBoot/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_DualBoot/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 1f63cf15c2..04d5d2f601 100644 --- a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 04dc093680..b4f5f45116 100644 --- a/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/FMC/FMC_SRAM_DataMemory/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA224SHA256_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA224SHA256_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld index e58023ec2d..38720c7838 100644 --- a/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA224SHA256_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/HASH/HASH_SHA224SHA256_DMA/STM32CubeIDE/STM32F439NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_ColorKeying/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_ColorKeying/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_ColorKeying/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_ColorKeying/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_1Layer/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Prescaler_Selection/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Prescaler_Selection/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Prescaler_Selection/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Prescaler_Selection/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 9f35df6875..aedb9558b8 100644 --- a/Projects/STM324x9I_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 938bcc1881..f739336d58 100644 --- a/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F439NIHx_FLASH.ld b/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F439NIHx_FLASH.ld index bffccc7502..459c6c4bf4 100644 --- a/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F439NIHx_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Templates/STM32CubeIDE/STM32F439NIHx_FLASH.ld @@ -83,27 +83,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F429NIHX_FLASH.ld b/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F429NIHX_FLASH.ld index 938bcc1881..f739336d58 100644 --- a/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F429NIHX_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F429NIHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F439NIHx_FLASH.ld b/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F439NIHx_FLASH.ld index 38897ca0c2..bb462a21aa 100644 --- a/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F439NIHx_FLASH.ld +++ b/Projects/STM324x9I_EVAL/Templates_LL/STM32CubeIDE/STM32F439NIHx_FLASH.ld @@ -83,27 +83,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM324xG_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4c10749910..6f6218b4fe 100644 --- a/Projects/STM324xG_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/Camera/Camera_To_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/Display/LCD_Paint/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/Display/LCD_Paint/STM32CubeIDE/STM32F407IGHX_FLASH.ld index f27d10eaf1..d567fc27bc 100644 --- a/Projects/STM324xG_EVAL/Applications/Display/LCD_Paint/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/Display/LCD_Paint/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407IGHX_FLASH.ld index f27d10eaf1..d567fc27bc 100644 --- a/Projects/STM324xG_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4c10749910..6f6218b4fe 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/Src/stm32f4xx_it.c b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/Src/stm32f4xx_it.c index 0da0fde41a..dce29ac076 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/Src/stm32f4xx_it.c +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives/Src/stm32f4xx_it.c @@ -149,16 +149,6 @@ void BSP_SD_DMA_Rx_IRQHandler(void) HAL_DMA_IRQHandler(uSdHandle.hdmarx); } -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - /** * @brief This function handles SDIO interrupt request. * @param None diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index c4894a1154..c00b6ef26e 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_RAMDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d375c6afe5..3120c2f53d 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 10551f8061..839e3bcdec 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 10551f8061..839e3bcdec 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4c10749910..6f6218b4fe 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index c4894a1154..c00b6ef26e 100644 --- a/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index e050a648f6..d9f2d99769 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ - diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 2ecd3b8ccd..1dcfae1837 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -119,13 +119,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -133,7 +135,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -142,7 +144,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -152,7 +154,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/src/ymodem.c b/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/src/ymodem.c index 9faaa32939..c946bb48e9 100644 --- a/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/src/ymodem.c +++ b/Projects/STM324xG_EVAL/Applications/IAP/IAP_Main/src/ymodem.c @@ -355,7 +355,7 @@ COM_StatusTypeDef Ymodem_Receive ( uint32_t *p_size ) /* Test the size of the image to be sent */ /* Image size is greater than Flash size */ - if (*p_size > (USER_FLASH_SIZE + 1)) + if (filesize > (USER_FLASH_SIZE + 1)) { /* End session */ tmp = CA; diff --git a/Projects/STM324xG_EVAL/Applications/IAP/IAP_binary_template/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/IAP/IAP_binary_template/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 159c8ad25a..ede181fbc1 100644 --- a/Projects/STM324xG_EVAL/Applications/IAP/IAP_binary_template/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/IAP/IAP_binary_template/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 9bb4acd4b4..03a722f752 100644 --- a/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 8b72acb3ed..93be3bdb17 100644 --- a/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h index eb2133fdb4..518b961630 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h @@ -175,6 +175,16 @@ The STM32F4xx allows computing and verifying the IP, UDP, TCP and ICMP checksums */ #define LWIP_SOCKET 0 +/* + ------------------------------------ + ---------- LWIP_NETIF_API options ---------- + ------------------------------------ +*/ +/** + * LWIP_NETIF_API==1: Enable NETIF API + */ +#define LWIP_NETIF_API 1 + /* ------------------------------------ ---------- httpd options ---------- diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c index 2d6d225b02..9599175f2b 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c @@ -26,6 +26,7 @@ #ifdef USE_LCD #include "lcd_log.h" #endif +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ @@ -106,7 +107,7 @@ void DHCP_Thread(void const * argument) BSP_LED_Off(LED1); BSP_LED_Off(LED2); #endif - dhcp_start(netif); + netifapi_dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS: @@ -136,7 +137,7 @@ void DHCP_Thread(void const * argument) IP_ADDR4(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + netifapi_netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); #ifdef USE_LCD sprintf((char *)iptxt, "%s", ip4addr_ntoa(netif_ip4_addr(netif))); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c index da6b2fe1d4..e25b8a01a4 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c @@ -23,11 +23,14 @@ #include "ethernetif.h" #include "../Components/dp83848/dp83848.h" #include +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT ( osWaitForever ) +/* Time to block waiting for transmissions to finish */ +#define ETHIF_TX_TIMEOUT (2000U) /* Stack size of the interface thread */ #define INTERFACE_THREAD_STACK_SIZE ( 512 ) @@ -44,7 +47,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -177,7 +180,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } PHYLinkState = DP83848_GetLinkState(&DP83848); @@ -272,13 +280,29 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p) pbuf_ref(p); - HAL_ETH_Transmit_IT(&EthHandle, &TxConfig); - - while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + do { - } - - HAL_ETH_ReleaseTxPacket(&EthHandle); + if(HAL_ETH_Transmit_IT(&EthHandle, &TxConfig) == HAL_OK) + { + errval = ERR_OK; + } + else + { + if(HAL_ETH_GetError(&EthHandle) & HAL_ETH_ERROR_BUSY) + { + /* Wait for descriptors to become available */ + osSemaphoreWait( TxPktSemaphore, ETHIF_TX_TIMEOUT); + HAL_ETH_ReleaseTxPacket(&EthHandle); + errval = ERR_BUF; + } + else + { + /* Other error */ + pbuf_free(p); + errval = ERR_IF; + } + } + }while(errval == ERR_BUF); return errval; } @@ -612,8 +636,8 @@ void ethernet_link_thread( void const * argument ) if(netif_is_link_up(netif) && (PHYLinkState <= DP83848_STATUS_LINK_DOWN)) { HAL_ETH_Stop_IT(&EthHandle); - netif_set_down(netif); - netif_set_link_down(netif); + netifapi_netif_set_down(netif); + netifapi_netif_set_link_down(netif); } else if(!netif_is_link_up(netif) && (PHYLinkState > DP83848_STATUS_LINK_DOWN)) { @@ -651,8 +675,8 @@ void ethernet_link_thread( void const * argument ) MACConf.Speed = speed; HAL_ETH_SetMACConfig(&EthHandle, &MACConf); HAL_ETH_Start_IT(&EthHandle); - netif_set_up(netif); - netif_set_link_up(netif); + netifapi_netif_set_up(netif); + netifapi_netif_set_link_up(netif); } } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/httpserver-netconn.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/httpserver-netconn.c index d596659994..1e815fa21e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/httpserver-netconn.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/httpserver-netconn.c @@ -169,21 +169,21 @@ static void http_server_serve(struct netconn *conn) if (strncmp((char const *)buf,"GET /STM32F4xx_files/ST.gif",27)==0) { fs_open(&file, "/STM32F4xx_files/ST.gif"); - netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY); + netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_COPY); fs_close(&file); } /* Check if request to get stm32.jpeg */ else if (strncmp((char const *)buf,"GET /STM32F4xx_files/stm32.jpg",30)==0) { fs_open(&file, "/STM32F4xx_files/stm32.jpg"); - netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY); + netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_COPY); fs_close(&file); } else if (strncmp((char const *)buf,"GET /STM32F4xx_files/logo.jpg", 29) == 0) { /* Check if request to get ST logo.jpg */ fs_open(&file, "/STM32F4xx_files/logo.jpg"); - netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY); + netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_COPY); fs_close(&file); } else if(strncmp(buf, "GET /STM32F4xxTASKS.html", 24) == 0) @@ -195,14 +195,14 @@ static void http_server_serve(struct netconn *conn) { /* Load STM32F4xx page */ fs_open(&file, "/STM32F4xx.html"); - netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY); + netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_COPY); fs_close(&file); } else { /* Load Error page */ fs_open(&file, "/404.html"); - netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_NOCOPY); + netconn_write(conn, (const unsigned char*)(file.data), (size_t)file.len, NETCONN_COPY); fs_close(&file); } } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Inc/lwipopts.h b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Inc/lwipopts.h index 77dd36f344..61bb2f22a3 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Inc/lwipopts.h +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Inc/lwipopts.h @@ -188,6 +188,9 @@ The STM32F4x7 allows computing and verifying the IP, UDP, TCP and ICMP checksums ------------------------------------ */ +/** Set this to TCP_WRITE_FLAG_COPY to copy data from flash memory */ +#define HTTP_IS_DATA_VOLATILE(hs) TCP_WRITE_FLAG_COPY + /** Set this to 1 to support CGI */ #define LWIP_HTTPD_CGI 1 diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Src/ethernetif.c index 94ebb9a33d..ee6aa418b1 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Raw/Src/ethernetif.c @@ -41,7 +41,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -155,7 +155,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Inc/lwipopts.h b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Inc/lwipopts.h index f1c3020ba6..585bb35b5d 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Inc/lwipopts.h +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Inc/lwipopts.h @@ -177,6 +177,16 @@ The STM32F4xx allows computing and verifying the IP, UDP, TCP and ICMP checksums */ #define LWIP_SOCKET 1 +/* + ------------------------------------ + ---------- LWIP_NETIF_API options ---------- + ------------------------------------ +*/ +/** + * LWIP_NETIF_API==1: Enable NETIF API + */ +#define LWIP_NETIF_API 1 + /* ------------------------------------ ---------- httpd options ---------- diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/app_ethernet.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/app_ethernet.c index 741501cbcf..395457341c 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/app_ethernet.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/app_ethernet.c @@ -26,6 +26,8 @@ #ifdef USE_LCD #include "lcd_log.h" #endif +#include "lwip/netifapi.h" + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ @@ -105,7 +107,7 @@ void DHCP_Thread(void const * argument) BSP_LED_Off(LED1); BSP_LED_Off(LED2); #endif - dhcp_start(netif); + netifapi_dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS: @@ -135,7 +137,7 @@ void DHCP_Thread(void const * argument) IP_ADDR4(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + netifapi_netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); #ifdef USE_LCD sprintf((char *)iptxt, "%s", ip4addr_ntoa(netif_ip4_addr(netif))); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/ethernetif.c index b079eda0b6..df2ec6bffe 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_HTTP_Server_Socket_RTOS/Src/ethernetif.c @@ -23,11 +23,14 @@ #include "ethernetif.h" #include "../Components/dp83848/dp83848.h" #include +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT ( osWaitForever ) +/* Time to block waiting for transmissions to finish */ +#define ETHIF_TX_TIMEOUT (2000U) /* Stack size of the interface thread */ #define INTERFACE_THREAD_STACK_SIZE ( 512 ) @@ -44,7 +47,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -177,7 +180,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } PHYLinkState = DP83848_GetLinkState(&DP83848); @@ -272,13 +280,29 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p) pbuf_ref(p); - HAL_ETH_Transmit_IT(&EthHandle, &TxConfig); - - while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + do { - } - - HAL_ETH_ReleaseTxPacket(&EthHandle); + if(HAL_ETH_Transmit_IT(&EthHandle, &TxConfig) == HAL_OK) + { + errval = ERR_OK; + } + else + { + if(HAL_ETH_GetError(&EthHandle) & HAL_ETH_ERROR_BUSY) + { + /* Wait for descriptors to become available */ + osSemaphoreWait( TxPktSemaphore, ETHIF_TX_TIMEOUT); + HAL_ETH_ReleaseTxPacket(&EthHandle); + errval = ERR_BUF; + } + else + { + /* Other error */ + pbuf_free(p); + errval = ERR_IF; + } + } + }while(errval == ERR_BUF); return errval; } @@ -612,8 +636,8 @@ void ethernet_link_thread( void const * argument ) if(netif_is_link_up(netif) && (PHYLinkState <= DP83848_STATUS_LINK_DOWN)) { HAL_ETH_Stop_IT(&EthHandle); - netif_set_down(netif); - netif_set_link_down(netif); + netifapi_netif_set_down(netif); + netifapi_netif_set_link_down(netif); } else if(!netif_is_link_up(netif) && (PHYLinkState > DP83848_STATUS_LINK_DOWN)) { @@ -651,8 +675,8 @@ void ethernet_link_thread( void const * argument ) MACConf.Speed = speed; HAL_ETH_SetMACConfig(&EthHandle, &MACConf); HAL_ETH_Start_IT(&EthHandle); - netif_set_up(netif); - netif_set_link_up(netif); + netifapi_netif_set_up(netif); + netifapi_netif_set_link_up(netif); } } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4c10749910..6f6218b4fe 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/ethernetif.c index 7c1adc0403..27073d80d7 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/ethernetif.c @@ -41,7 +41,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -154,7 +154,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/httpserver.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/httpserver.c index fac24e8be6..8e6e5beb19 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/httpserver.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_IAP/Src/httpserver.c @@ -136,7 +136,7 @@ static void send_data(struct tcp_pcb *pcb, struct http_state *hs) { len = hs->left; } - err = tcp_write(pcb, hs->file, len, 0); + err = tcp_write(pcb, hs->file, len, TCP_WRITE_FLAG_COPY); if (err == ERR_OK) { hs->file += len; diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/Src/ethernetif.c index dbe6e7db9e..d625465de5 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Client/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -157,7 +157,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/Src/ethernetif.c index 415bab20b4..28cf191853 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TCP_Echo_Server/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -156,7 +156,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/.cproject b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/.cproject index 44392206f3..fd71c5038f 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/.cproject +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/.cproject @@ -1,88 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -159,6 +77,7 @@ + @@ -175,4 +94,5 @@ + \ No newline at end of file diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4c10749910..6f6218b4fe 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c index 2803015e75..75317c4015 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -157,7 +157,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c index 9f864c11b1..92a7332afb 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server/Src/stm32f4xx_it.c @@ -145,36 +145,6 @@ void SysTick_Handler(void) /* file (startup_stm32f4xx.s). */ /******************************************************************************/ -/** -* @brief This function handles DMA2 Stream 3 interrupt request. -* @param None -* @retval None -*/ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** -* @brief This function handles DMA2 Stream 6 interrupt request. -* @param None -* @retval None -*/ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** -* @brief This function handles SDIO interrupt request. -* @param None -* @retval None -*/ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @brief This function handles PPP interrupt request. * @param None diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h index b6511b97ed..b562eac785 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Inc/lwipopts.h @@ -179,6 +179,16 @@ The STM32F4xx allows computing and verifying the IP, UDP, TCP and ICMP checksums /* --------------------------------- + ---------- LWIP_NETIF_API options ---------- + ------------------------------------ +*/ +/** + * LWIP_NETIF_API==1: Enable NETIF API + */ +#define LWIP_NETIF_API 1 + +/* + ------------------------------------ ---------- OS options ---------- --------------------------------- */ diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c index aa2a50df99..b98927f1b9 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/app_ethernet.c @@ -26,6 +26,7 @@ #ifdef USE_LCD #include "lcd_log.h" #endif +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ @@ -106,7 +107,7 @@ void DHCP_Thread(void const * argument) BSP_LED_Off(LED1); BSP_LED_Off(LED2); #endif - dhcp_start(netif); + netifapi_dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS: @@ -136,7 +137,7 @@ void DHCP_Thread(void const * argument) IP_ADDR4(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + netifapi_netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); #ifdef USE_LCD sprintf((char *)iptxt, "%s", ip4addr_ntoa(netif_ip4_addr(netif))); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c index def594dc17..71cd9c9c30 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDPTCP_Echo_Server_Netconn_RTOS/Src/ethernetif.c @@ -23,11 +23,14 @@ #include "ethernetif.h" #include "../Components/dp83848/dp83848.h" #include +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT ( osWaitForever ) +/* Time to block waiting for transmissions to finish */ +#define ETHIF_TX_TIMEOUT (2000U) /* Stack size of the interface thread */ #define INTERFACE_THREAD_STACK_SIZE ( 512 ) @@ -44,7 +47,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -176,7 +179,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } PHYLinkState = DP83848_GetLinkState(&DP83848); @@ -271,13 +279,29 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p) pbuf_ref(p); - HAL_ETH_Transmit_IT(&EthHandle, &TxConfig); - - while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + do { - } - - HAL_ETH_ReleaseTxPacket(&EthHandle); + if(HAL_ETH_Transmit_IT(&EthHandle, &TxConfig) == HAL_OK) + { + errval = ERR_OK; + } + else + { + if(HAL_ETH_GetError(&EthHandle) & HAL_ETH_ERROR_BUSY) + { + /* Wait for descriptors to become available */ + osSemaphoreWait( TxPktSemaphore, ETHIF_TX_TIMEOUT); + HAL_ETH_ReleaseTxPacket(&EthHandle); + errval = ERR_BUF; + } + else + { + /* Other error */ + pbuf_free(p); + errval = ERR_IF; + } + } + }while(errval == ERR_BUF); return errval; } @@ -611,8 +635,8 @@ void ethernet_link_thread( void const * argument ) if(netif_is_link_up(netif) && (PHYLinkState <= DP83848_STATUS_LINK_DOWN)) { HAL_ETH_Stop_IT(&EthHandle); - netif_set_down(netif); - netif_set_link_down(netif); + netifapi_netif_set_down(netif); + netifapi_netif_set_link_down(netif); } else if(!netif_is_link_up(netif) && (PHYLinkState > DP83848_STATUS_LINK_DOWN)) { @@ -650,8 +674,8 @@ void ethernet_link_thread( void const * argument ) MACConf.Speed = speed; HAL_ETH_SetMACConfig(&EthHandle, &MACConf); HAL_ETH_Start_IT(&EthHandle); - netif_set_up(netif); - netif_set_link_up(netif); + netifapi_netif_set_up(netif); + netifapi_netif_set_link_up(netif); } } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c index 9db3fc643b..189cacc8bd 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Client/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -158,7 +158,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c index 8498f1295a..d8ec29c95b 100644 --- a/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c +++ b/Projects/STM324xG_EVAL/Applications/LwIP/LwIP_UDP_Echo_Server/Src/ethernetif.c @@ -44,7 +44,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -158,7 +158,12 @@ static void low_level_init(struct netif *netif) DP83848_RegisterBusIO(&DP83848, &DP83848_IOCtx); /* Initialize the DP83848 ETH PHY */ - DP83848_Init(&DP83848); + if(DP83848_Init(&DP83848) != DP83848_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } ethernet_link_check_state(netif); } diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 46877817ad..f47c71f16e 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 3d532a1d22..f4017e899a 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 3d532a1d22..f4017e899a 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/CustomHID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 04f7693200..6f708a75b9 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index be8e1d11a5..cc3609a865 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 2d40cf2143..6d7d27c919 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 0f6ac0a108..3dad220fd6 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 5cf78ab830..8ffc1bf6ba 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 1e66df7c72..a040a71493 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c b/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c index 729010a603..16a775bbbb 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/CDC_Standalone/Src/stm32f4xx_it.c @@ -164,36 +164,6 @@ void EXTI2_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); } -/** - * @brief This function handles DMA2 Stream 3 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** - * @brief This function handles SDIO interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @brief This function handles External line 15_10 interrupt request. * @param None diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 40e8ec55d6..288f39d6ac 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/DualCore_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index f083895d5d..c850911243 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c index 1d50a782fa..a2f2a6a5b1 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/audio.c @@ -252,7 +252,7 @@ void AUDIO_PlaybackProbeKey(JOYState_TypeDef state) */ static AUDIO_ErrorTypeDef AUDIO_GetFileInfo(uint16_t file_idx, WAV_InfoTypedef *info) { - uint8_t str [FILEMGR_FILE_NAME_SIZE + 20]; + uint8_t str [FILEMGR_FILE_NAME_SIZE + 30]; uint32_t bytesread; uint32_t duration; diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c index fe49195622..06bd6c744f 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/DynamicSwitch_Standalone/Src/stm32f4xx_it.c @@ -174,36 +174,6 @@ void EXTI2_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); } -/** - * @brief This function handles DMA2 Stream 3 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream3_IRQHandler(void) -{ - BSP_SD_DMA_Rx_IRQHandler(); -} - -/** - * @brief This function handles DMA2 Stream 6 interrupt request. - * @param None - * @retval None - */ -void DMA2_Stream6_IRQHandler(void) -{ - BSP_SD_DMA_Tx_IRQHandler(); -} - -/** - * @brief This function handles SDIO interrupt request. - * @param None - * @retval None - */ -void SDIO_IRQHandler(void) -{ - BSP_SD_IRQHandler(); -} - /** * @brief This function handles PPP interrupt request. * @param None diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index c700187adb..b946deae5f 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 5cf78ab830..8ffc1bf6ba 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index a7f4945152..4a2e2061ee 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 6e949f1825..3469d7182e 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 5cf78ab830..8ffc1bf6ba 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 0f6ac0a108..3dad220fd6 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/Src/audio.c b/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/Src/audio.c index b80c5443d6..86cef4a7ce 100644 --- a/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/Src/audio.c +++ b/Projects/STM324xG_EVAL/Applications/USB_Host/MTP_Standalone/Src/audio.c @@ -281,7 +281,7 @@ void AUDIO_PlaybackProbeKey(JOYState_TypeDef state) */ static AUDIO_ErrorTypeDef AUDIO_GetFileInfo(uint16_t file_idx, WAV_InfoTypedef *info) { - uint8_t str [FILE_NAME_SIZE + 26]; + uint8_t str [FILE_NAME_SIZE + 30]; uint8_t fname [FILE_NAME_SIZE]; uint32_t bytesread; uint32_t duration; diff --git a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8d065081f6..1d27fada2e 100644 --- a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c index 36620db541..17d972585e 100644 --- a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c +++ b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Client/Src/hardware_rng.c @@ -23,28 +23,72 @@ #include "main.h" #include +#include "mbedtls/entropy.h" #include "mbedtls/entropy_poll.h" -extern RNG_HandleTypeDef RngHandle; +static __IO uint32_t isInitialized = 0; -int mbedtls_hardware_poll( void *Data, unsigned char *Output, size_t Len, size_t *oLen ) +static RNG_HandleTypeDef RNG_Handle; + +static void RNG_Init(void); +/* RNG init function */ +static void RNG_Init(void) +{ + if (isInitialized == 0) + { + RNG_Handle.Instance = RNG; + /* DeInitialize the RNG peripheral */ + if (HAL_RNG_DeInit(&RNG_Handle) != HAL_OK) + { + return; + } + /* Initialize the RNG peripheral */ + if (HAL_RNG_Init(&RNG_Handle) != HAL_OK) + { + return; + } + isInitialized = 1; + } +} + +int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen) { - uint32_t index; - uint32_t randomValue; - - for (index = 0; index < Len/4; index++) + __IO uint8_t random_value[4]; + int ret = 0; + + RNG_Init(); + + if (isInitialized == 0) { - if (HAL_RNG_GenerateRandomNumber(&RngHandle, &randomValue) == HAL_OK) + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + else + { + *oLen = 0; + while ((*oLen < Len) && (ret == 0)) { - *oLen += 4; - memset(&(Output[index * 4]), (int)randomValue, 4); + if (HAL_RNG_GenerateRandomNumber(&RNG_Handle, (uint32_t *)random_value) == HAL_OK) + { + for (uint8_t i = 0; (i < sizeof(uint32_t)) && (*oLen < Len) ; i++) + { + Output[*oLen] = random_value[i]; + *oLen += 1; + } + } + else + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } } - else + + /* Just be extra sure that we didn't do it wrong */ + if (__HAL_RNG_GET_FLAG(&RNG_Handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) != 0) { - Error_Handler(); + *oLen = 0; + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; } } - - return 0; + + return ret; } #endif /*MBEDTLS_ENTROPY_HARDWARE_ALT*/ diff --git a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8d065081f6..1d27fada2e 100644 --- a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c index 20b9b5f1ed..4f1c0cf30e 100644 --- a/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c +++ b/Projects/STM324xG_EVAL/Applications/mbedTLS/SSL_Server/Src/hardware_rng.c @@ -26,28 +26,72 @@ #include "main.h" #include +#include "mbedtls/entropy.h" #include "mbedtls/entropy_poll.h" -extern RNG_HandleTypeDef RngHandle; +static __IO uint32_t isInitialized = 0; -int mbedtls_hardware_poll( void *Data, unsigned char *Output, size_t Len, size_t *oLen ) +static RNG_HandleTypeDef RNG_Handle; + +static void RNG_Init(void); +/* RNG init function */ +static void RNG_Init(void) +{ + if (isInitialized == 0) + { + RNG_Handle.Instance = RNG; + /* DeInitialize the RNG peripheral */ + if (HAL_RNG_DeInit(&RNG_Handle) != HAL_OK) + { + return; + } + /* Initialize the RNG peripheral */ + if (HAL_RNG_Init(&RNG_Handle) != HAL_OK) + { + return; + } + isInitialized = 1; + } +} + +int mbedtls_hardware_poll(void *Data, unsigned char *Output, size_t Len, size_t *oLen) { - uint32_t index; - uint32_t randomValue; - - for (index = 0; index < Len/4; index++) + __IO uint8_t random_value[4]; + int ret = 0; + + RNG_Init(); + + if (isInitialized == 0) { - if (HAL_RNG_GenerateRandomNumber(&RngHandle, &randomValue) == HAL_OK) + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + else + { + *oLen = 0; + while ((*oLen < Len) && (ret == 0)) { - *oLen += 4; - memset(&(Output[index * 4]), (int)randomValue, 4); + if (HAL_RNG_GenerateRandomNumber(&RNG_Handle, (uint32_t *)random_value) == HAL_OK) + { + for (uint8_t i = 0; (i < sizeof(uint32_t)) && (*oLen < Len) ; i++) + { + Output[*oLen] = random_value[i]; + *oLen += 1; + } + } + else + { + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } } - else + + /* Just be extra sure that we didn't do it wrong */ + if (__HAL_RNG_GET_FLAG(&RNG_Handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) != 0) { - Error_Handler(); + *oLen = 0; + ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; } } - - return 0; + + return ret; } #endif /*MBEDTLS_ENTROPY_HARDWARE_ALT*/ diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_DualModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_InjectedConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_TriggerMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/ADC/ADC_TripleModeInterleaved/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/BSP/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/BSP/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/BSP/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/BSP/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CAN/CAN_LoopBack/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CAN/CAN_Networking/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_AESModes_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/CRYP/CRYP_TDESModes/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d185645052..1119761923 100644 --- a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -88,13 +88,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -102,7 +104,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -111,7 +113,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -121,7 +123,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DAC/DAC_SimpleConversion/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_CaptureMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_CaptureMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_CaptureMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_CaptureMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_SnapshotMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_SnapshotMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_SnapshotMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DCMI/DCMI_SnapshotMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM_DataMemory/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM_DataMemory/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 4e0b46e151..1c22bf7695 100644 --- a/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM_DataMemory/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/FSMC/FSMC_SRAM_DataMemory/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HASH/HASH_HMAC_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld index 8ee706dcab..2008b6b503 100644 --- a/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/HASH/HASH_SHA1MD5_DMA/STM32CubeIDE/STM32F417IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/PWR/PWR_BOR/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/PWR/PWR_PVD/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/SMARTCARD/SMARTCARD_T0/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/SMARTCARD/SMARTCARD_T0/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/SMARTCARD/SMARTCARD_T0/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/SMARTCARD/SMARTCARD_T0/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_6Steps/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_7PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_CascadeSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ComplementarySignals/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_DMABurst/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_Encoder/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ExtTriggerSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCInactive/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_ParallelSynchro/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_Synchronization/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_DMA/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/UART/UART_Hyperterminal_IT/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/UART/UART_Printf/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld index d3d5b3aba2..704a61045e 100644 --- a/Projects/STM324xG_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 376832ef66..7e2ffd414a 100644 --- a/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F417IGHx_FLASH.ld b/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F417IGHx_FLASH.ld index ae061dc9c0..8622886561 100644 --- a/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F417IGHx_FLASH.ld +++ b/Projects/STM324xG_EVAL/Templates/STM32CubeIDE/STM32F417IGHx_FLASH.ld @@ -87,27 +87,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F407IGHX_FLASH.ld b/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F407IGHX_FLASH.ld index 376832ef66..7e2ffd414a 100644 --- a/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F407IGHX_FLASH.ld +++ b/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F407IGHX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F417IGHx_FLASH.ld b/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F417IGHx_FLASH.ld index 7818c26748..c424770dc4 100644 --- a/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F417IGHx_FLASH.ld +++ b/Projects/STM324xG_EVAL/Templates_LL/STM32CubeIDE/STM32F417IGHx_FLASH.ld @@ -87,27 +87,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32CubeProjectsList.html b/Projects/STM32CubeProjectsList.html index bbc6ac7c65..7c911f55ef 100644 --- a/Projects/STM32CubeProjectsList.html +++ b/Projects/STM32CubeProjectsList.html @@ -27,7 +27,7 @@

    STM32CubeF4 Firmware Examples for STM32F4xx Series

    The STM32CubeF4 Firmware package comes with a rich set of examples running on STMicroelectronics boards, organized by board and provided with preconfigured projects for the main supported toolchains.

    - +

    The examples are classified depending on the STM32Cube level they apply to, and are named as follows:

    diff --git a/Projects/STM32F4-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 4e814cf57e..4688908f1e 100644 --- a/Projects/STM32F4-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Demonstrations/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Demonstrations/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Demonstrations/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Demonstrations/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Master/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/Slave/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F4-Discovery/Templates_LL/STM32CubeIDE/STM32F407VGTX_FLASH.ld b/Projects/STM32F4-Discovery/Templates_LL/STM32CubeIDE/STM32F407VGTX_FLASH.ld index 484d3ee5c1..6b575a1405 100644 --- a/Projects/STM32F4-Discovery/Templates_LL/STM32CubeIDE/STM32F407VGTX_FLASH.ld +++ b/Projects/STM32F4-Discovery/Templates_LL/STM32CubeIDE/STM32F407VGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F401VCTX_FLASH.ld b/Projects/STM32F401-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F401VCTX_FLASH.ld index 7286e4799b..4381ef92a9 100644 --- a/Projects/STM32F401-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F401VCTX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F401VCTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Demonstrations/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Demonstrations/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Demonstrations/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Demonstrations/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401VCTX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401VCTX_FLASH.ld index 2caa962e93..4f90143cb2 100644 --- a/Projects/STM32F401-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401VCTX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401VCTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld index 4b2a36bfb7..374a15bb52 100644 --- a/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F401CCUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401-Discovery/Templates_LL/STM32CubeIDE/STM32F401VCTX_FLASH.ld b/Projects/STM32F401-Discovery/Templates_LL/STM32CubeIDE/STM32F401VCTX_FLASH.ld index 2caa962e93..4f90143cb2 100644 --- a/Projects/STM32F401-Discovery/Templates_LL/STM32CubeIDE/STM32F401VCTX_FLASH.ld +++ b/Projects/STM32F401-Discovery/Templates_LL/STM32CubeIDE/STM32F401VCTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401RETX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401RETX_FLASH.ld index 60b0f84242..b43bfc2efe 100644 --- a/Projects/STM32F401RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401RETX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F401RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401RETX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401RETX_FLASH.ld index 60b0f84242..b43bfc2efe 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401RETX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F401RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F401RETX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F401RETX_FLASH.ld index 60b0f84242..b43bfc2efe 100644 --- a/Projects/STM32F401RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F401RETX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F401RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Templates/STM32CubeIDE/STM32F401CEUX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Templates/STM32CubeIDE/STM32F401CEUX_FLASH.ld index 05ad32b46d..7bf1124c00 100644 --- a/Projects/STM32F401RE-Nucleo/Templates/STM32CubeIDE/STM32F401CEUX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Templates/STM32CubeIDE/STM32F401CEUX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F401RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F401RETX_FLASH.ld b/Projects/STM32F401RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F401RETX_FLASH.ld index 60b0f84242..b43bfc2efe 100644 --- a/Projects/STM32F401RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F401RETX_FLASH.ld +++ b/Projects/STM32F401RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F401RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter_Init/STM32CubeIDE/STM32F410RBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter_Init/STM32CubeIDE/STM32F410RBTX_FLASH.ld index 4ae66653e3..72b39a9db3 100644 --- a/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter_Init/STM32CubeIDE/STM32F410RBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Examples_LL/LPTIM/LPTIM_PulseCounter_Init/STM32CubeIDE/STM32F410RBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410CBUx_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410CBUx_FLASH.ld index 9f021f7c54..d93ec35ee7 100644 --- a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410CBUx_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410CBUx_FLASH.ld @@ -86,27 +86,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410RBTx_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410RBTx_FLASH.ld index 04285a8001..ad718dfa42 100644 --- a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410RBTx_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410RBTx_FLASH.ld @@ -86,27 +86,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410TBYX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410TBYX_FLASH.ld index 7ced04a381..ba17bfc5a8 100644 --- a/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410TBYX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates/STM32CubeIDE/STM32F410TBYX_FLASH.ld @@ -86,27 +86,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410CBTX_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410CBTX_FLASH.ld index b3732cfdc4..a0a4a187cc 100644 --- a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410CBTX_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410CBTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410RBTx_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410RBTx_FLASH.ld index cb9bbb72a6..f2fc1c0ff9 100644 --- a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410RBTx_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410RBTx_FLASH.ld @@ -87,27 +87,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410TBYx_FLASH.ld b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410TBYx_FLASH.ld index cb7403541f..6b445f1e7b 100644 --- a/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410TBYx_FLASH.ld +++ b/Projects/STM32F410xx-Nucleo/Templates_LL/STM32CubeIDE/STM32F410TBYx_FLASH.ld @@ -86,27 +86,31 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F411E-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F411VEHX_FLASH.ld index e1312e5356..7047b0d46b 100644 --- a/Projects/STM32F411E-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Demonstrations/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Demonstrations/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Demonstrations/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Demonstrations/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411E-Discovery/Templates_LL/STM32CubeIDE/STM32F411VEHX_FLASH.ld b/Projects/STM32F411E-Discovery/Templates_LL/STM32CubeIDE/STM32F411VEHX_FLASH.ld index 0f40af582d..20e9ffad0b 100644 --- a/Projects/STM32F411E-Discovery/Templates_LL/STM32CubeIDE/STM32F411VEHX_FLASH.ld +++ b/Projects/STM32F411E-Discovery/Templates_LL/STM32CubeIDE/STM32F411VEHX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Demonstrations/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Demonstrations/STM32CubeIDE/STM32F411RETX_FLASH.ld index 2ec558951b..05901f1f74 100644 --- a/Projects/STM32F411RE-Nucleo/Demonstrations/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Demonstrations/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_AnalogWatchdog/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_AnalogWatchdog/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_AnalogWatchdog/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_AnalogWatchdog/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_ContinuousConversion_TriggerSW_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_GroupsRegularInjected/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_GroupsRegularInjected/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_GroupsRegularInjected/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_GroupsRegularInjected/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_MultiChannelSingleConversion/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_MultiChannelSingleConversion/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_MultiChannelSingleConversion/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_MultiChannelSingleConversion/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_TemperatureSensor/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_TemperatureSensor/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_TemperatureSensor/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/ADC/ADC_TemperatureSensor/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/DMA/DMA_CopyFromFlashToMemory_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/EXTI/EXTI_ToggleLedOnIT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/GPIO/GPIO_InfiniteLedToggling_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_AdvCommunication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_AdvCommunication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_AdvCommunication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_AdvCommunication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_DMAAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_PollingAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_PollingAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_PollingAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_OneBoard_Communication_PollingAndIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterRx_SlaveTx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterRx_SlaveTx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterRx_SlaveTx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterRx_SlaveTx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/I2C/I2C_TwoBoards_MasterTx_SlaveRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/IWDG/IWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/IWDG/IWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/IWDG/IWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/IWDG/IWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStandbyMode/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStandbyMode/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStandbyMode/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStandbyMode/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStopMode/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStopMode/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStopMode/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/PWR/PWR_EnterStopMode/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_OutputSystemClockOnMCO/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_OutputSystemClockOnMCO/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_OutputSystemClockOnMCO/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_OutputSystemClockOnMCO/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSEasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSEasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSEasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSEasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSI_PLLasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSI_PLLasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSI_PLLasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RCC/RCC_UseHSI_PLLasSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Alarm_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Calendar/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_ExitStandbyWithWakeUpTimer/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_ExitStandbyWithWakeUpTimer/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_ExitStandbyWithWakeUpTimer/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_ExitStandbyWithWakeUpTimer/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Tamper/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Tamper/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Tamper/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_Tamper/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_DMA_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_OneBoard_HalfDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/SPI/SPI_TwoBoards_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_BreakAndDeadtime/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_BreakAndDeadtime/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_BreakAndDeadtime/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_BreakAndDeadtime/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_InputCapture/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_InputCapture/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_InputCapture/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_InputCapture/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OnePulse/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OnePulse/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OnePulse/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OnePulse/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OutputCompare/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OutputCompare/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OutputCompare/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_OutputCompare/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_PWMOutput_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/TIM/TIM_TimeBase/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Continuous/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Continuous/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Continuous/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Continuous/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Rx_IT_Init/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_TxRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_TxRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_TxRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_TxRx_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_Communication_Tx_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_HardwareFlowControl/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_HardwareFlowControl/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_HardwareFlowControl/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_HardwareFlowControl/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_DMA/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/USART/USART_SyncCommunication_FullDuplex_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ConfigureSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ConfigureSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ConfigureSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ConfigureSystemClock/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ReadDeviceInfo/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ReadDeviceInfo/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ReadDeviceInfo/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/UTILS/UTILS_ReadDeviceInfo/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/CRC/CRC_CalculateAndCheck/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/I2C/I2C_OneBoard_ComSlave7_10bits_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/I2C/I2C_OneBoard_ComSlave7_10bits_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/I2C/I2C_OneBoard_ComSlave7_10bits_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/I2C/I2C_OneBoard_ComSlave7_10bits_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STANDBY_RTC/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STANDBY_RTC/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STANDBY_RTC/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STANDBY_RTC/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STOP/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STOP/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STOP/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/PWR/PWR_STOP/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_HalfDuplex_ComPollingIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_HalfDuplex_ComPollingIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_HalfDuplex_ComPollingIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/SPI/SPI_HalfDuplex_ComPollingIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_6Steps/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_6Steps/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_6Steps/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_6Steps/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/TIM/TIM_PWMInput/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_IT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_TxPolling_RxIT/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_TxPolling_RxIT/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_TxPolling_RxIT/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Examples_MIX/UART/UART_HyperTerminal_TxPolling_RxIT/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Templates/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Templates/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Templates/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Templates/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F411RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F411RETX_FLASH.ld b/Projects/STM32F411RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F411RETX_FLASH.ld index 63b50748fb..4a236f151b 100644 --- a/Projects/STM32F411RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F411RETX_FLASH.ld +++ b/Projects/STM32F411RE-Nucleo/Templates_LL/STM32CubeIDE/STM32F411RETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 28589d4ff1..e8a05d1e16 100644 --- a/Projects/STM32F412G-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 59ac8189b6..dd982a29dc 100644 --- a/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index f77f025c38..92067a1177 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ -
    diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index ca57487e32..8f68e1d45f 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -119,13 +119,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -133,7 +135,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -142,7 +144,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -152,7 +154,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 4e6549d9b2..1ad09cc3c0 100644 --- a/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 4e6549d9b2..1ad09cc3c0 100644 --- a/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412G-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0fb3d807db..dc0869a3ae 100644 --- a/Projects/STM32F412G-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 9346ca851e..a4fe34e743 100644 --- a/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/Src/audio.c b/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/Src/audio.c index f303d397ea..037a9b9ec0 100644 --- a/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/Src/audio.c +++ b/Projects/STM32F412G-Discovery/Applications/USB_Host/AUDIO_Standalone/Src/audio.c @@ -296,7 +296,7 @@ static AUDIO_ErrorTypeDef AUDIO_GetFileInfo(uint16_t file_idx, { uint32_t bytesread; uint32_t duration; - uint8_t str[FILEMGR_FILE_NAME_SIZE + 20]; + uint8_t str[FILEMGR_FILE_NAME_SIZE + 30]; if (f_open (&WavFile, (char *)FileList.file[file_idx].name, diff --git a/Projects/STM32F412G-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 9346ca851e..a4fe34e743 100644 --- a/Projects/STM32F412G-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/BSP/EWARM/Project.ewp b/Projects/STM32F412G-Discovery/Examples/BSP/EWARM/Project.ewp index 21352f79e3..edc75877d7 100644 --- a/Projects/STM32F412G-Discovery/Examples/BSP/EWARM/Project.ewp +++ b/Projects/STM32F412G-Discovery/Examples/BSP/EWARM/Project.ewp @@ -987,6 +987,9 @@ $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c + + $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c + $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\ls016b8uy\ls016b8uy.c diff --git a/Projects/STM32F412G-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx b/Projects/STM32F412G-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx index 4cdb80a130..0a3a532a8a 100644 --- a/Projects/STM32F412G-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx +++ b/Projects/STM32F412G-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx @@ -699,6 +699,11 @@ 1 ../../../../../Drivers/BSP/Components/ft6x06/ft6x06.c + + ft3x67.c + 1 + ../../../../../Drivers/BSP/Components/ft3x67/ft3x67.c + diff --git a/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/.project b/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/.project index 03632a08b3..3c0b76cb5a 100644 --- a/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/.project +++ b/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/.project @@ -220,6 +220,11 @@ 1 PARENT-5-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-5-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/ls016b8uy.c 1 diff --git a/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 4e01b2a49f..eee4a2d960 100644 --- a/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -86,13 +86,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -100,7 +102,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -109,7 +111,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -119,7 +121,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/DFSDM/DFSDM_AudioRecord/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/DFSDM/DFSDM_AudioRecord/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/DFSDM/DFSDM_AudioRecord/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/DFSDM/DFSDM_AudioRecord/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/I2S/I2S_Audio/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ExecuteInPlace/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ExecuteInPlace/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 9281d6c248..eec6753210 100644 --- a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ExecuteInPlace/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ExecuteInPlace/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -98,27 +98,31 @@ _qspi_init_base = LOADADDR(.qspi); _qspi_end = .; /* define a global symbols at end of qspi */ } >QSPI AT> FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_MemoryMapped/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_MemoryMapped/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_MemoryMapped/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_MemoryMapped/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_PreInitConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_PreInitConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index dc7e602eb0..600579a886 100644 --- a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_PreInitConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_PreInitConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -86,8 +86,12 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } >FLASH + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { __exidx_start = .; *(.ARM.exidx*) __exidx_end = .; @@ -107,20 +111,20 @@ SECTIONS } >QSPI - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array*)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array*)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT(.fini_array.*))) diff --git a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Templates/EWARM/Project.ewp b/Projects/STM32F412G-Discovery/Templates/EWARM/Project.ewp index 0ab9f4aa61..513a102f77 100644 --- a/Projects/STM32F412G-Discovery/Templates/EWARM/Project.ewp +++ b/Projects/STM32F412G-Discovery/Templates/EWARM/Project.ewp @@ -984,6 +984,9 @@ $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c + + $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c + $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\st7789h2\st7789h2.c diff --git a/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/.project b/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/.project index 3473d3a59f..976e6a6729 100644 --- a/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/.project +++ b/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/.project @@ -390,6 +390,11 @@ 1 PARENT-4-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-4-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/st7789h2.c 1 diff --git a/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412G-Discovery/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412G-Discovery/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412G-Discovery/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412G-Discovery/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 28589d4ff1..e8a05d1e16 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09dfd97df0..17c2258e9b 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 157219af1f..fb86007fc1 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index f8589e143f..f2fa0b783c 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_RTOS/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index f8589e143f..f2fa0b783c 100644 --- a/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Demonstrations/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Demonstrations/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 6051f21a43..4a96b524ad 100644 --- a/Projects/STM32F412ZG-Nucleo/Demonstrations/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Demonstrations/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 09b3daf3c9..bab5b66964 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/BSP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 4e01b2a49f..eee4a2d960 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -86,13 +86,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -100,7 +102,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -109,7 +111,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -119,7 +121,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Templates/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F412ZG-Nucleo/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld b/Projects/STM32F412ZG-Nucleo/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld index 0bb3c35df4..dfa36559f0 100644 --- a/Projects/STM32F412ZG-Nucleo/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld +++ b/Projects/STM32F412ZG-Nucleo/Templates_LL/STM32CubeIDE/STM32F412ZGJX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/Display/LCD_PicturesFromSDCard/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_MultipleAccess_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_USBDisk_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index d5ce52f043..b9b7b29537 100644 --- a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index d5ce52f043..b9b7b29537 100644 --- a/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FatFs/FatFs_uSD_RTOS/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index 773d997f2c..5e18ec4616 100644 --- a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ - diff --git a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 41bcedf63f..27e2eedf1d 100644 --- a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -116,13 +116,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -130,7 +132,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -139,7 +141,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -149,7 +151,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index c52a36857a..64140765d4 100644 --- a/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index c52a36857a..64140765d4 100644 --- a/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 5f835e3485..985a59d568 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_BCD_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_BCD_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index d5ce52f043..b9b7b29537 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_BCD_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_BCD_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index d5ce52f043..b9b7b29537 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/EWARM/USBH_HID.ewp b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/EWARM/USBH_HID.ewp index 6b85116f20..4a2f03abcb 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/EWARM/USBH_HID.ewp +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/EWARM/USBH_HID.ewp @@ -1018,6 +1018,9 @@ $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c + + $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c + $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\st7789h2\st7789h2.c diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/MDK-ARM/Project.uvprojx b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/MDK-ARM/Project.uvprojx index 93be8e2ac6..79b2778bcd 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/MDK-ARM/Project.uvprojx +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/MDK-ARM/Project.uvprojx @@ -399,6 +399,11 @@ 1 ../../../../../../Drivers/BSP/Components/ft6x06/ft6x06.c + + ft3x67.c + 1 + ../../../../../../Drivers/BSP/Components/ft3x67/ft3x67.c + diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/.project b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/.project index 548b29199f..799549202c 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/.project +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/.project @@ -175,6 +175,11 @@ 1 PARENT-6-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-6-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/st7789h2.c 1 diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index ce9cbf2df1..3dc7138098 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/EWARM/USBH_MSC.ewp b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/EWARM/USBH_MSC.ewp index eb029741e3..b6636f7dc8 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/EWARM/USBH_MSC.ewp +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/EWARM/USBH_MSC.ewp @@ -1022,6 +1022,9 @@ $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c + + $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c + $PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\st7789h2\st7789h2.c diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/MDK-ARM/Project.uvprojx b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/MDK-ARM/Project.uvprojx index c1f79493f8..dc93df885a 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/MDK-ARM/Project.uvprojx +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/MDK-ARM/Project.uvprojx @@ -402,6 +402,11 @@ 1 ../../../../../../Drivers/BSP/Components/ft6x06/ft6x06.c + + ft3x67.c + 1 + ../../../../../../Drivers/BSP/Components/ft3x67/ft3x67.c + diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/.project b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/.project index 5f4c72bbfb..1de846c0e3 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/.project +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/.project @@ -180,6 +180,11 @@ 1 PARENT-6-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-6-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/st7789h2.c 1 diff --git a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index c2b974de86..3cd28d13e9 100644 --- a/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_Client_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_Client_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index a7b283f29b..bad5cfd385 100644 --- a/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_Client_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_Client_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_HTTP_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_HTTP_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index a7b283f29b..bad5cfd385 100644 --- a/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_HTTP_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Applications/WIFI/WiFi_HTTP_Server/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/BSP/EWARM/Project.ewp b/Projects/STM32F413H-Discovery/Examples/BSP/EWARM/Project.ewp index 45ba36b3c5..8e992ec09c 100644 --- a/Projects/STM32F413H-Discovery/Examples/BSP/EWARM/Project.ewp +++ b/Projects/STM32F413H-Discovery/Examples/BSP/EWARM/Project.ewp @@ -2143,15 +2143,9 @@ Components $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c - - STM32F413H_DISCOVERY - $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c - - USE_STM32F413H_DISCOVERY_REVE - $PROJ_DIR$\..\..\..\..\..\Drivers\BSP\Components\st7789h2\st7789h2.c diff --git a/Projects/STM32F413H-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx b/Projects/STM32F413H-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx index 264c640683..675da9a783 100644 --- a/Projects/STM32F413H-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx +++ b/Projects/STM32F413H-Discovery/Examples/BSP/MDK-ARM/Project.uvprojx @@ -404,7 +404,7 @@ 0 0 0 - 0 + 1 2 2 2 @@ -454,6 +454,11 @@ 1 ../../../../../Drivers/BSP/Components/ft6x06/ft6x06.c + + ft3x67.c + 1 + ../../../../../Drivers/BSP/Components/ft3x67/ft3x67.c + st7789h2.c 1 @@ -1197,7 +1202,7 @@ 0 0 0 - 0 + 1 2 2 2 diff --git a/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/.project b/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/.project index 9411f315cd..85a92f8268 100644 --- a/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/.project +++ b/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/.project @@ -255,6 +255,11 @@ 1 PARENT-5-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-5-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/st7789h2.c 1 diff --git a/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 4440d6a9c2..7d347c9c9f 100644 --- a/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/DFSDM/DFSDM_PulseSkipper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/DFSDM/DFSDM_PulseSkipper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/DFSDM/DFSDM_PulseSkipper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/DFSDM/DFSDM_PulseSkipper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/FLASH/FLASH_WriteProtection/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM_PreInitConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM_PreInitConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 5647d2141d..a9c7988e00 100644 --- a/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM_PreInitConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/FMC/FMC_PSRAM_PreInitConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/QSPI/QSPI_ReadWrite_IT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/RTC/RTC_TimeStamp/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Templates/EWARM/Project.ewp b/Projects/STM32F413H-Discovery/Templates/EWARM/Project.ewp index b2c457631a..8c91596ae1 100644 --- a/Projects/STM32F413H-Discovery/Templates/EWARM/Project.ewp +++ b/Projects/STM32F413H-Discovery/Templates/EWARM/Project.ewp @@ -983,6 +983,9 @@ $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\ft6x06\ft6x06.c + + $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\ft3x67\ft3x67.c + $PROJ_DIR$\..\..\..\..\Drivers\BSP\Components\st7789h2\st7789h2.c diff --git a/Projects/STM32F413H-Discovery/Templates/MDK-ARM/Project.uvprojx b/Projects/STM32F413H-Discovery/Templates/MDK-ARM/Project.uvprojx index e220970ccc..808a79de42 100644 --- a/Projects/STM32F413H-Discovery/Templates/MDK-ARM/Project.uvprojx +++ b/Projects/STM32F413H-Discovery/Templates/MDK-ARM/Project.uvprojx @@ -385,6 +385,11 @@ 1 ../../../../Drivers/BSP/Components/ft6x06/ft6x06.c + + ft3x67.c + 1 + ../../../../Drivers/BSP/Components/ft3x67/ft3x67.c + st7789h2.c 1 diff --git a/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/.project b/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/.project index 1ed773be05..346fe13fd8 100644 --- a/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/.project +++ b/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/.project @@ -390,6 +390,11 @@ 1 PARENT-4-PROJECT_LOC/Drivers/BSP/Components/ft6x06/ft6x06.c + + Drivers/BSP/Components/ft3x67.c + 1 + PARENT-4-PROJECT_LOC/Drivers/BSP/Components/ft3x67/ft3x67.c + Drivers/BSP/Components/st7789h2.c 1 diff --git a/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413H-Discovery/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413H-Discovery/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413H-Discovery/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413H-Discovery/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 31336af75b..f7c68505c3 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index d5ce52f043..b9b7b29537 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FatFs/FatFs_uSD/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_LowPower/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index e5c5481a0c..bdf2e2edbe 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ - +
    @@ -173,4 +182,6 @@ + +
    \ No newline at end of file diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 1e51e7f571..5c358420ff 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -119,13 +119,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -133,7 +135,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -142,7 +144,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -152,7 +154,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mail/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Mutexes/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Queues/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Semaphore/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SemaphoreFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Signal/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_SignalFromISR/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/FreeRTOS/FreeRTOS_Timers/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 833d27e883..bbb77dc09c 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index a7b283f29b..bad5cfd385 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/USB_Device/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index c2b974de86..3cd28d13e9 100644 --- a/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Demonstrations/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Demonstrations/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 7c2e5f3cf3..fa1af6c48d 100644 --- a/Projects/STM32F413ZH-Nucleo/Demonstrations/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Demonstrations/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/ADC/ADC_RegularConversion_Polling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 4440d6a9c2..7d347c9c9f 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/BSP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index e24b1ef445..515f554b82 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -86,13 +86,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -100,7 +102,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -109,7 +111,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -119,7 +121,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ModePrivilege/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ProcessStack/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ProcessStack/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ProcessStack/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_ProcessStack/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FIFOMode/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STANDBY/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/PWR/PWR_STOP/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/RNG/RNG_MultiRNG/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Alarm/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_AdvComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/SRAM/SRAM_ExecuteInPlace/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/SRAM/SRAM_ExecuteInPlace/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index c26d3cc855..6e2e421829 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/SRAM/SRAM_ExecuteInPlace/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/SRAM/SRAM_ExecuteInPlace/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Templates/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F413ZH-Nucleo/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld b/Projects/STM32F413ZH-Nucleo/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld index 0f20e458af..3cc9583699 100644 --- a/Projects/STM32F413ZH-Nucleo/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld +++ b/Projects/STM32F413ZH-Nucleo/Templates_LL/STM32CubeIDE/STM32F413ZHTX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/Display/LTDC_AnimatedPictureFromUSB/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/Display/LTDC_AnimatedPictureFromUSB/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 9bcbf10ab0..4b2582a514 100644 --- a/Projects/STM32F429I-Discovery/Applications/Display/LTDC_AnimatedPictureFromUSB/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/Display/LTDC_AnimatedPictureFromUSB/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/Display/LTDC_Paint/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/Display/LTDC_Paint/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 283ed5cdad..f230ba46af 100644 --- a/Projects/STM32F429I-Discovery/Applications/Display/LTDC_Paint/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/Display/LTDC_Paint/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_RAMDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 4a860e2492..2c731d3548 100644 --- a/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject index 8ad347d4b2..92bcc25202 100644 --- a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject +++ b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/.cproject @@ -17,13 +17,13 @@ -
    diff --git a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld index f95aa387a8..1c531d3837 100644 --- a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -119,13 +119,15 @@ SECTIONS . = ALIGN(4); } >FLASH - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >FLASH - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -133,7 +135,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -142,7 +144,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -152,7 +154,7 @@ SECTIONS . = ALIGN(4); } >FLASH - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/FreeRTOS/FreeRTOS_ThreadCreation/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld index f1a8c824df..a9bc4e94bc 100644 --- a/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Decoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 51ae89df27..72d6b5b123 100644 --- a/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/LibJPEG/LibJPEG_Encoding/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld index f7f1709f64..7e53dc5e21 100644 --- a/Projects/STM32F429I-Discovery/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Applications/USB_Host/FWupgrade_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/DAC/DAC_SignalsGeneration/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithBlending/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/DMA2D/DMA2D_MemToMemWithPFC/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/FMC/FMC_SDRAM_LowPower/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F439BGTX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F439BGTX_FLASH.ld index ccc339ba89..5b48d53a6f 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F439BGTX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_AdvComIT/STM32CubeIDE/STM32F439BGTX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartAdvComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/I2C/I2C_TwoBoards_RestartComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/LTDC/LTDC_Display_2Layers/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/SPI/SPI_FullDuplex_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/TIM/TIM_TimeBase/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComIT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Examples/UART/UART_TwoBoards_ComPolling/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429I-Discovery/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429I-Discovery/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429I-Discovery/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429I-Discovery/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h index 38dd787306..1ac86088db 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h +++ b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Inc/lwipopts.h @@ -49,7 +49,7 @@ a lot of data that needs to be copied, this should be set high. */ #define MEMP_NUM_TCP_PCB_LISTEN 5 /* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. */ -#define MEMP_NUM_TCP_SEG 8 +#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN /* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. */ #define MEMP_NUM_SYS_TIMEOUT 10 @@ -77,11 +77,6 @@ a lot of data that needs to be copied, this should be set high. */ /* TCP sender buffer space (bytes). */ #define TCP_SND_BUF (4*TCP_MSS) -/* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least - as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */ - -#define TCP_SND_QUEUELEN (2* TCP_SND_BUF/TCP_MSS) - /* TCP receive window. */ #define TCP_WND (2*TCP_MSS) @@ -175,6 +170,16 @@ The STM32F4xx allows computing and verifying the IP, UDP, TCP and ICMP checksums */ #define LWIP_SOCKET 0 +/* + ------------------------------------ + ---------- LWIP_NETIF_API options ---------- + ------------------------------------ +*/ +/** + * LWIP_NETIF_API==1: Enable NETIF API + */ +#define LWIP_NETIF_API 1 + /* ------------------------------------ ---------- httpd options ---------- diff --git a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F429ZITX_FLASH.ld index b3d632afc2..d1da2d888e 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c index 11c7ea801f..8d19c4d372 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c +++ b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/app_ethernet.c @@ -26,6 +26,7 @@ #ifdef USE_LCD #include "lcd_log.h" #endif +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ @@ -106,7 +107,7 @@ void DHCP_Thread(void const * argument) BSP_LED_Off(LED1); BSP_LED_Off(LED2); #endif - dhcp_start(netif); + netifapi_dhcp_start(netif); } break; case DHCP_WAIT_ADDRESS: @@ -136,7 +137,7 @@ void DHCP_Thread(void const * argument) IP_ADDR4(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP_ADDR4(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP_ADDR4(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); - netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); + netifapi_netif_set_addr(netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw)); #ifdef USE_LCD sprintf((char *)iptxt, "%s", ip4addr_ntoa(netif_ip4_addr(netif))); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c index 63bc4f7de2..f185506e09 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c +++ b/Projects/STM32F429ZI-Nucleo/Applications/LwIP/LwIP_HTTP_Server_Netconn_RTOS/Src/ethernetif.c @@ -26,11 +26,14 @@ #include "ethernetif.h" #include "../Components/lan8742/lan8742.h" #include +#include "lwip/netifapi.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT ( osWaitForever ) +/* Time to block waiting for transmissions to finish */ +#define ETHIF_TX_TIMEOUT (2000U) /* Stack size of the interface thread */ #define INTERFACE_THREAD_STACK_SIZE ( 512 ) @@ -49,7 +52,7 @@ /* Private variables ---------------------------------------------------------*/ /* @Note: This interface is implemented to operate in zero-copy mode only: - - Rx Buffers will be allocated from LwIP stack memory heap, + - Rx Buffers will be allocated from LwIP stack Rx memory pool, then passed to ETH HAL driver. - Tx Buffers will be allocated from LwIP stack memory heap, then passed to ETH HAL driver. @@ -183,7 +186,12 @@ static void low_level_init(struct netif *netif) LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx); /* Initialize the LAN8742 ETH PHY */ - LAN8742_Init(&LAN8742); + if(LAN8742_Init(&LAN8742) != LAN8742_STATUS_OK) + { + netif_set_link_down(netif); + netif_set_down(netif); + return; + } PHYLinkState = LAN8742_GetLinkState(&LAN8742); @@ -287,13 +295,29 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p) pbuf_ref(p); - HAL_ETH_Transmit_IT(&EthHandle, &TxConfig); - - while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) + do { - } - - HAL_ETH_ReleaseTxPacket(&EthHandle); + if(HAL_ETH_Transmit_IT(&EthHandle, &TxConfig) == HAL_OK) + { + errval = ERR_OK; + } + else + { + if(HAL_ETH_GetError(&EthHandle) & HAL_ETH_ERROR_BUSY) + { + /* Wait for descriptors to become available */ + osSemaphoreWait( TxPktSemaphore, ETHIF_TX_TIMEOUT); + HAL_ETH_ReleaseTxPacket(&EthHandle); + errval = ERR_BUF; + } + else + { + /* Other error */ + pbuf_free(p); + errval = ERR_IF; + } + } + }while(errval == ERR_BUF); return errval; } @@ -606,8 +630,8 @@ void ethernet_link_thread( void const * argument ) if(netif_is_link_up(netif) && (PHYLinkState <= LAN8742_STATUS_LINK_DOWN)) { HAL_ETH_Stop_IT(&EthHandle); - netif_set_down(netif); - netif_set_link_down(netif); + netifapi_netif_set_down(netif); + netifapi_netif_set_link_down(netif); } else if(!netif_is_link_up(netif) && (PHYLinkState > LAN8742_STATUS_LINK_DOWN)) { @@ -645,8 +669,8 @@ void ethernet_link_thread( void const * argument ) MACConf.Speed = speed; HAL_ETH_SetMACConfig(&EthHandle, &MACConf); HAL_ETH_Start_IT(&EthHandle); - netif_set_up(netif); - netif_set_link_up(netif); + netifapi_netif_set_up(netif); + netifapi_netif_set_link_up(netif); } } diff --git a/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 6b97dc7d9f..03061c64f5 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld index eaa4035823..834cbbe1f2 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld index eaa4035823..834cbbe1f2 100644 --- a/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Demonstrations/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Demonstrations/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 6e674b9da3..7312464729 100644 --- a/Projects/STM32F429ZI-Nucleo/Demonstrations/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Demonstrations/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/BSP/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 1beaddafb9..0a6919d59c 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -88,13 +88,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -102,7 +104,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -111,7 +113,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -121,7 +123,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429ZITX_FLASH.ld index bcf519e0a1..dda1d0907f 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429ZITX_FLASH.ld index d2fa1c1208..a8e0d41971 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/UART/UART_ReceptionToIdle_CircularDMA/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/CORTEX/CORTEX_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/CORTEX/CORTEX_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/CORTEX/CORTEX_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/CORTEX/CORTEX_MPU/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateConstantSignal_TriggerSW/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateConstantSignal_TriggerSW/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateConstantSignal_TriggerSW/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateConstantSignal_TriggerSW/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW_Init/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW_Init/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW_Init/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/DAC/DAC_GenerateWaveform_TriggerHW_Init/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/DMA2D/DMA2D_MemoryToMemory/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_LL/RNG/RNG_GenerateRandomNumbers_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_MIX/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_MIX/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_MIX/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_MIX/ADC/ADC_SingleConversion_TriggerSW_IT/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Examples_MIX/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Examples_MIX/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Examples_MIX/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Examples_MIX/DMA2D/DMA2D_MemToMemWithLCD/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Templates/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F429ZI-Nucleo/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld b/Projects/STM32F429ZI-Nucleo/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld index 33f3577d12..4476e88180 100644 --- a/Projects/STM32F429ZI-Nucleo/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld +++ b/Projects/STM32F429ZI-Nucleo/Templates_LL/STM32CubeIDE/STM32F429ZITX_FLASH.ld @@ -87,13 +87,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -101,7 +103,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -110,7 +112,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -120,7 +122,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/EEPROM/EEPROM_Emulation/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld index c6505353ce..dbd2007e6a 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/FatFs/FatFs_USBDisk/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 6b37b5cce8..3a67f9130f 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/DFU_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/USB_Device/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/HID_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 169717c22b..40e0ff3afd 100644 --- a/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Applications/USB_Host/MSC_Standalone/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Demonstrations/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Demonstrations/STM32CubeIDE/STM32F446ZETX_FLASH.ld index ff98658a41..991628a98d 100644 --- a/Projects/STM32F446ZE-Nucleo/Demonstrations/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Demonstrations/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/ADC/ADC_RegularConversion_Interrupt/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/BSP/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/BSP/STM32CubeIDE/STM32F446ZETX_FLASH.ld index c6505353ce..dbd2007e6a 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/BSP/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/BSP/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/CRC/CRC_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 2faa87e700..8af3dc6d97 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_MPU/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -86,13 +86,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -100,7 +102,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -109,7 +111,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -119,7 +121,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/Cortex/CORTEXM_SysTick/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/DMA/DMA_FLASHToRAM/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/FLASH/FLASH_EraseProgram/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F446ZETX_FLASH.ld index c6505353ce..dbd2007e6a 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_EXTI/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld index c6505353ce..dbd2007e6a 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/GPIO/GPIO_IOToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_ALARM/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_RTC_WKUP/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/HAL/HAL_TimeBase_TIM/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/IWDG/IWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/PWR/PWR_CurrentConsumption/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/RCC/RCC_ClockConfig/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Calendar/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/RTC/RTC_Tamper/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_DMA/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_InputCapture/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCActive/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OCToggle/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_OnePulse/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMInput/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/TIM/TIM_PWMOutput/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/UART/UART_Printf/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 33e1b9b262..8da09cb4c1 100644 --- a/Projects/STM32F446ZE-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Examples/WWDG/WWDG_Example/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Templates/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Templates/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Templates/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Templates/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/Projects/STM32F446ZE-Nucleo/Templates_LL/STM32CubeIDE/STM32F446ZETX_FLASH.ld b/Projects/STM32F446ZE-Nucleo/Templates_LL/STM32CubeIDE/STM32F446ZETX_FLASH.ld index 19d2357415..5e9745e513 100644 --- a/Projects/STM32F446ZE-Nucleo/Templates_LL/STM32CubeIDE/STM32F446ZETX_FLASH.ld +++ b/Projects/STM32F446ZE-Nucleo/Templates_LL/STM32CubeIDE/STM32F446ZETX_FLASH.ld @@ -85,13 +85,15 @@ SECTIONS . = ALIGN(4); } >ROM - .ARM.extab : { + .ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); *(.ARM.extab* .gnu.linkonce.armextab.*) . = ALIGN(4); } >ROM - .ARM : { + .ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ + { . = ALIGN(4); __exidx_start = .; *(.ARM.exidx*) @@ -99,7 +101,7 @@ SECTIONS . = ALIGN(4); } >ROM - .preinit_array : + .preinit_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__preinit_array_start = .); @@ -108,7 +110,7 @@ SECTIONS . = ALIGN(4); } >ROM - .init_array : + .init_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__init_array_start = .); @@ -118,7 +120,7 @@ SECTIONS . = ALIGN(4); } >ROM - .fini_array : + .fini_array (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */ { . = ALIGN(4); PROVIDE_HIDDEN (__fini_array_start = .); diff --git a/README.md b/README.md index e3280cba53..d63445b6c4 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,8 @@ ![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/STM32CubeF4.svg?color=brightgreen) -## Important note - -This repository has been created using the `git submodule` command. Please refer to the ["How to use"](README.md#how-to-use) section for more details. +> [!IMPORTANT] +> This repository has been created using the `git submodule` command. Please refer to the ["How to use"](README.md#how-to-use) section for more details. ## Overview @@ -19,14 +18,15 @@ This repository has been created using the `git submodule` command. Please refer The **STM32CubeF4 MCU Package** projects are directly running on the STM32F4 series boards. You can find in each Projects/*Board name* directories a set of software projects (Applications/Demonstration/Examples). -## Some middleware libraries are unavailable in this repository - -In this repository, the middleware libraries listed below **along with** the projects (demos, applications, and examples) using them, are **not available** as they (the middleware libraries) are subject to some restrictive license terms requiring the user's approval via a "click thru" procedure. -* `./Middlewares/ST/STM32_Audio` -* `./Middlewares/ST/STemWin` -* `./Middlewares/ST/TouchGFX` - -If needed, they can be found inside the full firmware package available on our website `st.com` and downloadable from [here](https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-mcu-mpu-packages/stm32cubef4.html#get-software). You will be prompted to login or to register in case you have no account. +> [!NOTE] +> ## Some middleware libraries and projects are unavailable in this repository +> +> In this repository, the middleware libraries listed below **along with** [this](Projects/README.md#list-of-unavailable-projects) list of projects (demos, applications, and examples) using them, are **not available** as they (the middleware libraries) are subject to some restrictive license terms requiring the user's approval via a "click thru" procedure. +> * `./Middlewares/ST/STM32_Audio` +> * `./Middlewares/ST/STemWin` +> * `./Middlewares/ST/TouchGFX` +> +> If needed, they can be found inside the full firmware package available on our website `st.com` and downloadable from [here](https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-mcu-mpu-packages/stm32cubef4.html#get-software). You will be prompted to login or to register in case you have no account. ## Release note @@ -34,7 +34,7 @@ Details about the content of this release are available in the release note [her ## How to use -This repository has been created using the `git submodule` command. Please check the instructions below for proper use. Please check also the [notes](README.md#notes) at the end of this section for further information. +This repository has been created using the `git submodule` command. Please check the instructions below for proper use. Please check also **the notes at the end of this section** for further information. 1. To **clone** this repository along with the linked submodules, option `--recursive` has to be specified as shown below. @@ -61,11 +61,10 @@ git checkout vX.Y.Z # Specify the targeted vX.Y.Z version git clone --recursive --depth 1 --branch vX.Y.Z https://github.com/STMicroelectronics/STM32CubeF4.git ``` -#### Notes - -* The latest version of this firmware available on GitHub may be **ahead** of the one available on [st.com](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html) or via [STM32CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html). This is due to the **rolling release** process deployed on GitHub. Please refer to [this](https://github.com/STMicroelectronics/STM32Cube_MCU_Overall_Offer/discussions/21) post for more details. -* Option `--depth 1` specified in instruction (4) above is **not** mandatory. It may be useful to skip downloading all previous commits up to the one corresponding to the targeted version. -* If GitHub "Download ZIP" option is used instead of the `git clone` command, then the different submodules have to be collected and added **manually**. +> [!NOTE] +> * The latest version of this firmware available on GitHub may be **ahead** of the one available on [st.com](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html) or via [STM32CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html). This is due to the **rolling release** process deployed on GitHub. Please refer to [this](https://github.com/STMicroelectronics/STM32Cube_MCU_Overall_Offer/discussions/21) post for more details. +> * Option `--depth 1` specified in instruction (4) above is **not** mandatory. It may be useful to skip downloading all previous commits up to the one corresponding to the targeted version. +> * If GitHub "Download ZIP" option is used instead of the `git clone` command, then the different submodules have to be collected and added **manually**. ## Boards available diff --git a/Release_Notes.html b/Release_Notes.html index 58daf9f317..25e8070e24 100644 --- a/Release_Notes.html +++ b/Release_Notes.html @@ -37,7 +37,7 @@

    Purpose

  • A consistent set of middleware components such as RTOS, USB, TCP/IP, Graphics
  • All embedded software utilities come with a full set of examples.
  • -
  • The STM32Cube firmware solution offers a straightforward API with a modular architecture, making it simple to fine tune custom applications and scalable to fit most requirements STM32Cube architecture
  • +
  • The STM32Cube firmware solution offers a straightforward API with a modular architecture, making it simple to fine tune custom applications and scalable to fit most requirements STM32Cube architecture
  • The HAL (Hardware Abstraction Layer) drivers provided within this package supports the STM32F405/415/407/417/427/437/429/439/401xC/401xE/ 411xC/411xE/412x/413/423/446/469/479/410xx Lines

      @@ -60,12 +60,595 @@

      Purpose

      Update History

      - +

      Maintenance release

      Main Changes

      • General updates to fix known defects and implementation enhancements.
      • +
      • Patch release to deploy HAL Ethernet enhancements.
      • +
      • General fixes to support GCC11 and GCC12 in all STM32CubeIDE projects.
      • +
      • Upgrade USB Device Lib to use V2.11.3.
      • +
      • Upgrade USB Host Lib to use V3.5.2.

      • +
      • CMSIS +
          +
        • Add MCO2PRE[2:0] and MCO2[1:0] bits definition within CMSIS files.
        • +
      • +
      • HAL +
          +
        • Enhance HAL code quality for MISRA-C Rule-8.13 by adding const qualifiers.
        • +
        • HAL Generic +
            +
          • Update stm32h7xx_hal_conf_template.h file to support legacy HAL ETH driver.
          • +
        • +
        • HAL/LL ADC +
            +
          • Add macro UNUSED() to avoid the generation of a warning related to the unused argument ‘hadc’.
          • +
        • +
        • HAL RCC +
            +
          • Remove duplicate macro definition __HAL_RCC_AHB2_FORCE_RESET() for STM32F423xx devices.
          • +
        • +
        • HAL EXTI +
            +
          • Add macro UNUSED() to avoid the generation of a warning related to the unused argument ‘Edge’.
          • +
        • +
        • HAL HASH +
            +
          • Read the last remaining bytes (3 or 2 or 1) of the data in a temporary variable (taking into account swap mode) and enter this variable into the HASH->DIN when the data is not a multiple of 4 bytes.
          • +
        • +
        • HAL FLASH +
            +
          • Remove HAL_LOCK()/HAL_UNLOCK() APIs from HAL_FLASH_Program_IT() and HAL_FLASHEx_Erase_IT() APIs.
          • +
        • +
        • LL DMA +
            +
          • Fix typo in LL_DMA_GetCurrentTargetMem() API.
          • +
        • +
        • HAL LPTIM +
            +
          • Remove redundant macro IS_LPTIM_AUTORELOAD().
          • +
        • +
        • HAL/LL CORTEX +
            +
          • Updated HAL_MPU_ConfigRegion() API to allow the configuration of the MPU registers independently of the value of Enable/Disable field.
          • +
          • Add new HAL_MPU_EnableRegion() / HAL_MPU_DisableRegion() APIs.
          • +
          • Add missing parenthesis() in LL_MPU_ConfigRegion() API.
          • +
        • +
        • HAL DSI +
            +
          • Align DSI Initialization sequence to the recommended ‘Programing procedure overview’ part to avoid DSI read LCD controller register 0x0A error.
          • +
        • +
        • HAL QSPI +
            +
          • Clear the QSPI.AR register when sCommand.AddressMode is QSPI_ADDRESS_NONE.
          • +
        • +
        • HAL I2S +
            +
          • Update HAL I2S driver to fix misplaced __HAL_LOCK() API and remove ‘go to’ instruction.
          • +
        • +
        • HAL SPI +
            +
          • Update HAL SPI driver to remove “got to†instruction and avoid misplaced __HAL_LOCK() API issue.
          • +
        • +
        • HAL UART +
            +
          • Rework of UART_WaitOnFlagUntilTimeout() API to avoid being stuck forever when UART overrun error occurs and to enhance behavior.
          • +
        • +
        • HAL ETH +
            +
          • Add missing system time in different PTP APIs.
          • +
          • Rename ETH_TxPacketConfig_t to ETH_TxPacketConfigTypeDef.
          • +
          • Update ETH_Start_IT sequence.
          • +
          • Update the PTP configuration state macros and Fix the wrong Doxygen comment descriptions.
          • +
          • Fix wrong Ethernet constant definitions .
          • +
          • Add condition to get the Timestamp only when it was captured (Check on Last Descriptor and TimeStamp flag set).
          • +
          • Replace ETH_RX_BUF_SIZE define in ETH_UpdateDescriptor() and ETH_DMARxDescListInit() by Init.RxBuffLen.
          • +
          • Get the latest buffer length received and not the predefined ethernet frame length.
          • +
          • Update HAL_ETH_SetMDIOClockRange API to manage different frequency ranges.
          • +
          • Remove multiple volatile reads or writes in interrupt handler for better performance.
          • +
          • Move the MMC interrupts disable section from HAL_ETH_Start_IT() to HAL_ETH_Init().
          • +
          • Change the way to increment the descriptor index within HAL_ETH_ReleaseTxPacket().
          • +
          • Update the entry to critical section without enabling unwanted global interrupts.
          • +
          • Add support of CRC stripping for Type frames (CSTF) feature.
          • +
          • Fix MisraC-2012 and MCU ASTYLE warnings and remove empty lines.
          • +
        • +
        • HAL USB +
            +
          • Ensure to reactivate the usb channel in case of transfer error.
          • +
        • +
        • LL UTILS +
            +
          • Fix a note about Ticks parameter.
          • +
        • +
      • +
      • BSP +
          +
        • BSP Boards +
            +
          • STM32F413H-Discovery +
              +
            • Update to manage touch screen components (ft6x06 & ft3x67) available on different STM32F413H-Discovery board revisions in dynamic approach.
            • +
          • +
          • STM32412G-Discovery +
              +
            • Update to manage touch screen components (ft6x06 & ft3x67) available on different STM32412G-Discovery board revisions in dynamic approach.
            • +
          • +
          • STM32469I-Discovery +
              +
            • Update to manage lcd controller components (nt35510 & otm8009a) available on different STM32469I-Discovery board revisions in dynamic approach.
            • +
          • +
        • +
        • BSP Components +
            +
          • nt35510 +
              +
            • Fix setting of DPRSLCTR register.
            • +
          • +
          • lan8742 +
              +
            • Remove unnecessary delay in PHY driver.
            • +
          • +
        • +
      • +
      • Middlewares +
          +
        • Upgrade USB Device Lib to use V2.11.3.
        • +
        • Upgrade USB Host Lib to use V3.5.2.
        • +
      • +
      • Projects +
          +
        • Applications MW LwIP +
            +
          • Fix Confusing comment in ethernet_if.
          • +
          • Fix Wrong use of DHCP API in application code & ethernet_link_thread() API.
          • +
          • Fix Ethernet low_level_init() API does not handle return code from LAN8742_init() API.
          • +
        • +
        • Examples I2C +
            +
          • Fix wrong check condition on HAL_TIMEOUT: this value is no longer returned by the HAL_I2C_IsDeviceReady() API.
          • +
        • +
      • +
      • For the complete list of changes, please refer to the release notes of each firmware component

      • +
      +

      Contents

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Drivers
      NameVersionRelease note
      CMSISV5.9.0release notes
      STM32F4xx CMSISV2.6.10release notes
      STM32F4xx HALV1.8.3release notes
      BSP STM32469I-EVALV2.1.2release notes
      BSP STM32469I-DiscoveryV2.2.0release notes
      BSP STM32446E-EVALV2.1.2release notes
      BSP STM324xG-EVALV3.0.4release notes
      BSP STM324x9I-EVALV3.0.3release notes
      BSP STM32F4-DiscoveryV2.1.5release notes
      BSP STM32F401-DiscoveryV2.2.5release notes
      BSP STM32F411E-DiscoveryV1.0.6release notes
      BSP STM32F429I-DiscoveryV2.1.8release notes
      BSP STM32F4xx-NucleoV1.2.9release notes
      BSP STM32F4xx-Nucleo 144V1.0.5release notes
      BSP STM32412G-DiscoveryV2.1.0release notes
      BSP STM32F413H-DiscoveryV1.1.0release notes
      BSP Adafruit_ShieldV3.0.6release notes
      BSP Components CommonV4.0.1release notes
      BSP Components ampire480272V1.0.4release notes
      BSP Components ampire640480V1.0.4release notes
      BSP Components cs43l22V2.0.5release notes
      BSP Components ili9325V1.2.4release notes
      BSP Components ili9341V1.0.3release notes
      BSP Components l3gd20V2.0.2release notes
      BSP Components lis302dlV2.0.1release notes
      BSP Components lis3dshV2.0.1release notes
      BSP Components lsm303dlhcV2.0.2release notes
      BSP Components ov2640V1.0.3release notes
      BSP Components st7735V1.1.6release notes
      BSP Components stmpe1600V1.1.2release notes
      BSP Components stmpe811V2.0.3release notes
      BSP Components ts3510V1.0.3release notes
      BSP Components wm8994V2.3.2release notes
      BSP Components mfxstm32l152V2.0.5release notes
      BSP Components s5k5cagV1.0.2release notes
      BSP Components n25q256aV1.0.2release notes
      BSP Components exc7200V1.0.3release notes
      BSP Components ft6x06V1.1.1release notes
      BSP Components ft3x67V1.0.2release notes
      BSP Components otm8009aV1.0.7release notes
      BSP Components s25fl512sV1.0.1release notes
      BSP Components n25q512aV1.0.2release notes
      BSP Components n25q128aV1.0.3release notes
      BSP Components ls016b8uyV1.0.2release notes
      BSP Components st7789h2V1.1.5release notes
      BSP Components ov5640V2.0.1release notes
      BSP Components i3g4250dV1.0.1release notes
      BSP Components lsm303agrV1.0.2release notes
      BSP Components nt35510V1.0.3release notes
      BSP Components dp83848V1.0.2release notes
      BSP Components lan8742V1.0.4release notes
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Middlewares
      NameVersionRelease note
      STemWinV5.44release notes
      STM32 PDM audio software decoding LibraryV3.5.1release notes
      STM32 USB Device LibraryV2.11.3release notes
      STM32 USB Host LibraryV3.5.2release notes
      FatFSR0.12crelease notes ST modified 20230818 release notes
      FreeRTOSV10.3.1release notes ST modified 20230818 release notes
      LwIPV2.1.2release notes ST modified ST modified 20230828 release notes
      MbedTLSV2.16.2release notesST modified 20231024 release notes
      LibJPEGV8drelease notes ST modified 20190201 release notes
      TouchGFXv4.10.0release notes
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Utilities
      NameVersionRelease note
      CPUV1.1.4release notes
      FontsV1.0.3release notes
      LogV1.0.4release notes
      +

      Known Limitations

      +
        +
      • USB_Device_Standalone application for STM324x9I_EVAL +
          +
        • MDK-ARM and STM32CubeIDE projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
        • +
      • +
      • STemWin demonstration for STM32F413H-Discovery +
          +
        • Issue on audio recorder module with MDK-ARM, to be fixed for next releases.
        • +
      • +
      • The following STM32CubeIDE projects include only Release configuration : +
          +
        • STM32446E_EVAL/Demonstrations/STemWin
        • +
        • STM324x9I_EVAL/Demonstrations/STemWin
        • +
        • STM324xG_EVAL/Demonstrations/STemWin
        • +
        • STM324x9I_EVAL/Applications/FatFs/FatFs_MultiDrives
        • +
        • STM324x9I_EVAL/Applications/FatFs/FatFs_uSD
        • +
        • STM324xG_EVAL/Applications/FatFs/FatFs_MultiDrives
        • +
        • STM324xG_EVAL/Applications/FatFs/FatFs_uSD
        • +
        • STM324x9I_EVAL/Applications/USB_Host/AUDIO_Standalone
        • +
        • STM324xG_EVAL/Applications/USB_Host/AUDIO_Standalone
        • +
        • STM324x9I_EVAL/Applications/USB_Host/DynamicSwitch_Standalone
        • +
        • STM324x9I_EVAL/Applications/LwIP/LwIP_TFTP_Server
        • +
        • STM324xG_EVAL/Applications/LwIP/LwIP_TFTP_Server
        • +
      • +
      • The following STM32CubeIDE project include only Debug configuration : +
          +
        • STM32469I_EVAL/Applications/Display/LCD_DSI_ImagesSlider
        • +
      • +
      • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
      • +
      +

      Development Toolchains and Compilers

      +
        +
      • IAR Embedded Workbench for ARM (EWARM) toolchain V8.50.9 + ST-Link.
      • +
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.32 minimum (ARM Compiler 5 (“AC5-like Warnings†selected)) +
          +
        • Note : MDK-ARM 5.38 comes by default with AC6 only. To use it with AC5, please follow the steps available in this AN: +
            +
          • https://developer.arm.com/documentation/ka005073/latest/
          • +
        • +
      • +
      • STM32CubeIDE toolchain v1.15.0
      • +
      +

      Supported Devices and EVAL boards

      +
        +
      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • +
      • STM32F469xx and STM32469I-Discovery board RevC
      • +
      • STM32F410xx and STM32F410xx-Nucleo board RevC
      • +
      • STM32F446xx devices STM32446E_EVAL board RevB
      • +
      • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
      • +
      • STM32F429xx and STM32F429I-Discovery board RevB
      • +
      • STM32F407xx/417xx devices and STM324xG-EVAL board RevC
      • +
      • STM32F407xx and STM32F4-Discovery board RevC
      • +
      • STM32F401xC and STM32F401C-Discovery board RevB
      • +
      • STM32F401xE and STM32F401RE-Nucleo board RevC
      • +
      • STM32F411xE and STM32F411RE-Nucleo board RevC
      • +
      • STM32F411xE and STM32F411E-Discovery board RevC
      • +
      • STM32F412ZG and STM32F412ZG-Discovery board RevD
      • +
      • STM32F446ZE and STM32F446ZE-Nucleo board RevB
      • +
      • STM32F429ZI and STM32F429ZI-Nucleo board RevB
      • +
      • STM32F412ZG and STM32F412ZG-Nucleo board RevB
      • +
      • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      • +
      • STM32F413ZHT6U and STM32F413H-Discovery board RevD
      • +
      +

      Backward Compatibility

      +
        +
      • None
      • +
      +

      Dependencies

      +
        +
      • None
      • +
      +
      +
      +
      + +
      +

      Maintenance release

      +

      Main Changes

      +
        +
      • General updates to fix known defects and implementation enhancements.
      • Deploy the support of STM32CubeIDE toolchain on all projects
        • SW4STM32 toolchain support is discontinued (Warning : Any reference to SW4STM32 in STM32CubeF4 firmware package documents should be interpreted as STM32CubeIDE).
        • @@ -312,7 +895,7 @@

          Main Changes

      • For the complete list of changes, please refer to the release notes of each firmware component

      -

      Contents

      +

      Contents

      @@ -669,7 +1252,7 @@

      Contents

      Drivers
      -

      Known Limitations

      +

      Known Limitations

      • USB_Device_Standalone application for STM324x9I_EVAL
          @@ -697,7 +1280,7 @@

          Known Limitations

      • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain V8.50.4 + ST-Link.
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.31 @@ -706,7 +1289,7 @@

        Development Toolchains and Compile

    • STM32CubeIDE toolchain v1.14.0
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevC
    • @@ -727,11 +1310,11 @@

      Supported Devices and EVAL boards

      STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -740,8 +1323,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Patch release of STM32CubeF4 Firmware Package.

    • HAL @@ -756,7 +1339,7 @@

      Main Changes

    -

    Contents

    +

    Contents

    @@ -778,8 +1361,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • General updates to fix known defects and implementation enhancements.
    • All source files: update disclaimer to add reference to the new license agreement.
    • @@ -983,7 +1566,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -1340,7 +1923,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -1353,13 +1936,13 @@

        Known Limitations

      • SW4STM32 projects are not provided for all EVAL demonstrations.
      • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain V8.50.4 + ST-Link.
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.31
      • System Workbench for STM32 (SW4STM32) (7-2018-q2-update) toolchain v2.9.0 + ST-Link
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevC
      • @@ -1380,11 +1963,11 @@

        Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413H-Discovery board RevD
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -1393,8 +1976,8 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • General updates to fix known defects and enhancements implementation.

      • CMSIS updates @@ -1501,7 +2084,7 @@

        Main Changes

    -

    Contents

    +

    Contents

    @@ -1528,8 +2111,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Patch release to mainly fix a wrong system clock configuration in some STM32F411/412/413 projects.

    • HAL @@ -1548,7 +2131,7 @@

      Main Changes

    -

    Contents

    +

    Contents

    @@ -1570,8 +2153,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • General updates to fix known defects and enhancements implementation
    • Add new HAL FMPSMBUS extended driver to support FMPSMBUS fast Mode Plus.
    • @@ -1859,7 +2442,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component
  • -

    Contents

    +

    Contents

    @@ -2201,7 +2784,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -2214,13 +2797,13 @@

        Known Limitations

      • SW4STM32 projects are not provided for all EVAL demonstrations.
      • Only template projects migrated to Arm Compiler 6 with MDK-ARM 5.31 (“AC-like Warnings†mode).
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain V8.50.4 + ST-Link.
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.31
      • System Workbench for STM32 (SW4STM32) toolchain V2.9.0 + ST-Link
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevC
      • @@ -2241,11 +2824,11 @@

        Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413H-Discovery board RevD
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -2254,8 +2837,8 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Patch release of STM32CubeF4 Firmware Package.

      • HAL

        @@ -2269,7 +2852,7 @@

        Main Changes

    -

    Contents

    +

    Contents

    @@ -2291,8 +2874,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Patch release to fix known defects and enhancements implementation.

    • HAL

      @@ -2323,7 +2906,7 @@

      Main Changes

    -

    Contents

    +

    Contents

    @@ -2345,8 +2928,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Add new HAL FMPSMBUS and LL FMPI2C drivers
    • General updates to fix known defects and enhancements implementation
    • @@ -2447,7 +3030,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -2774,7 +3357,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -2786,13 +3369,13 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link.
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.27.1
    • System Workbench for STM32 (SW4STM32) toolchain V2.9.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -2813,11 +3396,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -2826,8 +3409,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Patch release to fix known defects and enhancements implementation

    • HAL @@ -2848,7 +3431,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -2876,8 +3459,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Patch release to fix mainly the I2C send break issue with IT processes API’s
    • HAL I2C update @@ -2909,7 +3492,7 @@

      Main Changes

    • Software Quality improvement with a fix ofCodeSonar warning on PCD_Port_IRQHandler() and HCD_Port_IRQHandler()interrupt handlers
    -

    Contents

    +

    Contents

    Drivers
    @@ -2932,8 +3515,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • HAL
        @@ -3015,7 +3598,7 @@

        Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component
    -

    Contents

    +

    Contents

    Drivers
    @@ -3337,7 +3920,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -3349,13 +3932,13 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link.
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25
    • System Workbench for STM32 (SW4STM32) toolchain V2.6.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -3376,11 +3959,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -3389,8 +3972,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Maintenance release:
        @@ -3402,8 +3985,8 @@

        Main Changes

        -

        Maintenance release

        -

        Main Changes

        +

        Maintenance release

        +

        Main Changes

        • Thanks to the acquisition of Draupner Graphics A/S, ST is extending the STM32 ecosystem with advanced and easy to use graphic software solution enabling stunning GUI additions to embedded devices. TouchGFX solution is now fully part of STM32CubeF4.
        • TouchGFX examples and demonstrations can be accessed directly through the TouchGFX Designer tool. Here you simply create a new project, select the appropriate ST board in the Application Template section and select whatever demonstration or example you want in the UI Template selector. After this you will have a TouchGFX application ready to compile and flash to the selected ST board. More information are available here

        • @@ -3430,7 +4013,7 @@

          Main Changes

      • For the complete list of changes, please refer to the release notes of each firmware component

      -

      Contents

      +

      Contents

      @@ -3752,7 +4335,7 @@

      Contents

      Drivers
      -

      Known Limitations

      +

      Known Limitations

      • USB_Device_Standalone application for STM324x9I_EVAL
          @@ -3768,13 +4351,13 @@

          Known Limitations

      • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain V8.20.2 + ST-Link.
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain V5.25
      • System Workbench for STM32 (SW4STM32) toolchain V2.6.0 + ST-Link
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevB
      • @@ -3795,11 +4378,11 @@

        Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413H-Discovery board RevD
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -3808,8 +4391,8 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • General updates to fix known defects and enhancements implementation

      • HAL @@ -3839,7 +4422,7 @@

        Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    +

    Contents

    @@ -4156,7 +4739,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -4169,13 +4752,13 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.80.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.23 + Keil.STM32F4xx_DFP.2.11.0.pack
    • System Workbench for STM32 (SW4STM32) toolchain V1.14
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -4196,11 +4779,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -4209,12 +4792,12 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Package Clean-up: remove unwanted project folders
    -

    Contents

    +

    Contents

    @@ -4531,7 +5114,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -4544,13 +5127,13 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.80.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.23 + Keil.STM32F4xx_DFP.2.11.0.pack
    • System Workbench for STM32 (SW4STM32) toolchain V1.14
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -4571,11 +5154,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -4584,8 +5167,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • General updates to be compliant with Linux platforms
    • General update to fix known defects and several implementations enhancement
    • @@ -4644,7 +5227,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component
  • -

    Contents

    +

    Contents

    @@ -4961,7 +5544,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -4974,13 +5557,13 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.80.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.23 + Keil.STM32F4xx_DFP.2.11.0.pack
    • System Workbench for STM32 (SW4STM32) toolchain V1.14
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5001,11 +5584,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -5014,8 +5597,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • General update to fix known defects and several implementations enhancement

    • HAL @@ -5048,7 +5631,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -5360,7 +5943,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -5368,14 +5951,14 @@

        Known Limitations

    • TrueSTUDIO and SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.80.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.23 + Keil.STM32F4xx_DFP.2.11.0.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v7.1.2
    • System Workbench for STM32 (SW4STM32) toolchain V1.13
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5396,11 +5979,11 @@

      Supported Devices and EVAL boardsSTM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -5409,8 +5992,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Add the support of the STM32F413H-Discovery board
        @@ -5485,7 +6068,7 @@

        Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    +

    Contents

    @@ -5797,7 +6380,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -5805,14 +6388,14 @@

        Known Limitations

    • SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.80.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.22 + Keil.STM32F4xx_DFP.2.11.0.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.5.2
    • System Workbench for STM32 (SW4STM32) toolchain V1.13
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -5833,11 +6416,11 @@

      Supported Devices and EVAL boards<
    • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
    • STM32F413ZHT6U and STM32F413H-Discovery board RevD
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -5846,8 +6429,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Official release to add the support of STM32F413xx and STM32F423xx devices
    • Fix known defects and several implementation enhancement

    • @@ -5897,7 +6480,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -6209,7 +6792,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -6218,14 +6801,14 @@

        Known Limitations

      • TrueSTUDIO and SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
      • STemWin sample demo applications with all STM32 platforms are not fully functional with MDK-ARM toolchain: the application doesn t run successfully after the second hit of the Hide Button. in fact when presing the button again while the progress bar displays the next steps, pressing Hide or Next Buttons are not working anymore.
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain v7.60.1
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.21a + Keil.STM32F4xx_DFP.2.11.0.pack
      • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.5.2
      • System Workbench for STM32 (SW4STM32) toolchain V1.10
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevB
      • @@ -6245,11 +6828,11 @@

        Supported Devices and EVAL boards<
      • STM32F412ZG and STM32F412ZG-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -6258,12 +6841,12 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Patch release to fix issues in I2C/FMPI2C HAL drivers
      -

      Contents

      +

      Contents

      @@ -6285,8 +6868,8 @@

      Contents

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Fix known defects and enhancements implementation
      • HAL @@ -6333,7 +6916,7 @@

        Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component
    • -

      Contents

      +

      Contents

      @@ -6645,21 +7228,21 @@

      Contents

      Drivers
      -

      Known Limitations

      +

      Known Limitations

      • USB_Device_Standalone application for STM324x9I_EVAL
      • MDK-ARM and TrueSTUDIO projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
      • TrueSTUDIO and SW4STM32 projects are not provided for all EVAL and Discovery demonstrations
      • STemWin sample demo applications with all STM32 platforms are not fully functional with MDK-ARM toolchain: the application doesn t run successfully after the second hit of the Hide Button. in fact when presing the button again while the progress bar displays the next steps, pressing Hide or Next Buttons are not working anymore.
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain v7.60.1
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.20 + Keil.STM32F4xx_DFP.2.6.1.pack
      • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.5.2
      • System Workbench for STM32 (SW4STM32) toolchain V1.9
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F469xx/479xx devices STM32469I_EVAL board RevC
      • STM32F469xx and STM32469I-Discovery board RevB
      • @@ -6679,11 +7262,11 @@

        Supported Devices and EVAL boards<
      • STM32F412ZG and STM32F412ZG-Nucleo board RevB
      • STM32F413ZHT6U and STM32F413ZH-Nucleo board RevB
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -6692,8 +7275,8 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Official release to add the support of STM32F412cx, STM32F412rx, STM32F412vx and STM32F412zx devices
      • Fix known defects and several implementation enhancement

      • @@ -6734,7 +7317,7 @@

        Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component

    -

    Contents

    +

    Contents

    @@ -7046,21 +7629,21 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
    • MDK-ARM and TrueSTUDIO projects are provided with optimization set to None, to avoid audio glitch when USB cable is disconnected
    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    • The STM32F412G-Discovery demonstration firmware is not part of this firmware package. It will be added in the next release.
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.60.1
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.17 + Keil.STM32F4xx_DFP.2.6.1.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.3.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.6
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -7079,11 +7662,11 @@

      Supported Devices and EVAL boards<
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    • STM32F412ZG and STM32F412ZG-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -7092,8 +7675,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Fix known defects and enhancements implementation
    • HAL @@ -7130,7 +7713,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component
  • -

    Contents

    +

    Contents

    @@ -7442,7 +8025,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -7450,14 +8033,14 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.50.1
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.17 + Keil.STM32F4xx_DFP.2.6.1.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.3.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.6
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -7474,11 +8057,11 @@

      Supported Devices and EVAL boards<
    • STM32F446ZE and STM32F446ZE-Nucleo board RevB
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -7487,12 +8070,12 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • For the complete list of changes, please refer to the release notes of each firmware component
    -

    Contents

    +

    Contents

    @@ -7514,8 +8097,8 @@

    Contents

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Support new boards: STM32F411E-Discovery, STM32F446ZE NUCLEO144 and STM32F429ZI NUCLEO144
    • Fix known defects and enhancements implementation

    • @@ -7551,7 +8134,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component

  • -

    Contents

    +

    Contents

    @@ -7853,7 +8436,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -7861,14 +8444,14 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.40.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.14 + Keil.STM32F4xx_DFP.2.6.0.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.4
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -7885,11 +8468,11 @@

      Supported Devices and EVAL boards<
    • STM32F446ZE and STM32F446ZE-Nucleo board RevB
    • STM32F429ZI and STM32F429ZI-Nucleo board RevB
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -7898,8 +8481,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Maintenance release to fix known defects and enhancements implementation
    • HAL @@ -7941,7 +8524,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware component
  • -

    Contents

    +

    Contents

    @@ -8238,7 +8821,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -8246,14 +8829,14 @@

        Known Limitations

    • TrueSTUDIO projects are not provided for all EVAL and Discovery demonstrations
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.40.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.14 + Keil.STM32F4xx_DFP.2.6.0.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.4
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -8267,11 +8850,11 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -8280,8 +8863,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Official release to support STM32F469xx, STM32F479xx, STM32F410Cx, STM32F410Rx and STM32F410Tx devices
    • Fix known defects and several enhancements implementation

    • @@ -8320,7 +8903,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware components

  • -

    Contents

    +

    Contents

    @@ -8617,7 +9200,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • USB_Device_Standalone application for STM324x9I_EVAL
        @@ -8628,14 +9211,14 @@

        Known Limitations

      • TrueSTUDIO project is not provided
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.40.4
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.14 + Keil.STM32F4xx_DFP.2.6.0.pack
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.4 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F469xx/479xx devices STM32469I_EVAL board RevC
    • STM32F469xx and STM32469I-Discovery board RevB
    • @@ -8649,11 +9232,11 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -8662,8 +9245,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Official release to support STM32446E-Nucleo board
    • Maintenance release to fix known defects

    • @@ -8700,7 +9283,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware components

  • -

    Contents

    +

    Contents

    @@ -8997,7 +9580,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -9025,7 +9608,7 @@

        Known Limitations

      • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.40.1
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.13 @@ -9039,7 +9622,7 @@

      Development Toolchains and Comp
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.1.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -9051,11 +9634,11 @@

      Supported Devices and EVAL boards<
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    • STM32F446RE and STM32446E-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -9064,8 +9647,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Add support of System Workbench for STM32 (SW4STM32) toolchain
    • Maintenance release to fix known defects

    • @@ -9105,7 +9688,7 @@

      Main Changes

  • Fix compile issue in some projects (9 in total), mainly due to bad project settings

  • -

    Contents

    +

    Contents

    @@ -9392,7 +9975,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • SW4STM32 projects are not provided for STM32446E_EVAL board, will be added in next release
    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release: @@ -9424,7 +10007,7 @@

      Known Limitations

    • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.30
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.13 @@ -9438,7 +10021,7 @@

      Development Toolchains and Comp
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.1.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -9449,11 +10032,11 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -9462,8 +10045,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Official release to support STM32F446xx devices
    • Fix known defects and several enhancements implementation

    • @@ -9501,7 +10084,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware components

  • -

    Contents

    +

    Contents

    @@ -9788,7 +10371,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -9819,7 +10402,7 @@

        Known Limitations

      • Robustness to be improved, the application may not work correctly after several board reset
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.30
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.13 @@ -9833,7 +10416,7 @@

      Development Toolchains and Comp
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.1.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F446xx devices STM32446E_EVAL board RevB
    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • @@ -9844,11 +10427,11 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -9857,8 +10440,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Maintenance release to fix known defects and several enhancements implementation
    • HAL @@ -9907,7 +10490,7 @@

      Main Changes

  • For the complete list of changes, please refer to the release notes of each firmware components

  • -

    Contents

    +

    Contents

    @@ -10194,7 +10777,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • The following issues are detected when using EWARM V7.30, however they are not present when using EWARM V7.10, they will be fixed in next release:
        @@ -10217,7 +10800,7 @@

        Known Limitations

      • TrueSTUDIO project is not provided
    -

    Development Toolchains and Compilers

    +

    Development Toolchains and Compilers

    • IAR Embedded Workbench for ARM (EWARM) toolchain v7.30
    • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.13 @@ -10231,7 +10814,7 @@

      Development Toolchains and Comp
    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
    • System Workbench for STM32 (SW4STM32) toolchain V1.1.0 + ST-Link
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • STM32F429xx and STM32F429I-Discovery board RevB
    • @@ -10241,11 +10824,11 @@

      Supported Devices and EVAL boards<
    • STM32F401xE and STM32F401RE-Nucleo board RevC
    • STM32F411xE and STM32F411RE-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    @@ -10254,8 +10837,8 @@

    Dependencies

    -

    Maintenance release

    -

    Main Changes

    +

    Maintenance release

    +

    Main Changes

    • Full features release, containing all projects sources for the supported boards

    • Projects @@ -10275,7 +10858,7 @@

      Main Changes

  • Use STM32CubeUpdater.exe utility V4.2.0

  • -

    Contents

    +

    Contents

    @@ -10557,7 +11140,7 @@

    Contents

    Drivers
    -

    Known Limitations

    +

    Known Limitations

    • PolarSSL applications for STM324x9I_EVAL and STM324xG_EVAL
        @@ -10574,7 +11157,7 @@

        Known Limitations

      • STM324x9I-EVAL, STM324xG-EVAL and STM32F429I-Discovery demonstration
      • TrueSTUDIO project is not provided
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain v7.30
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.13 @@ -10588,7 +11171,7 @@

        Development Toolchains and Comp
      • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.1.1
      • System Workbench for STM32 (SW4STM32) toolchain V1.1.0 + ST-Link
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
      • STM32F429xx and STM32F429I-Discovery board RevB
      • @@ -10598,11 +11181,11 @@

        Supported Devices and EVAL boards<
      • STM32F401xE and STM32F401RE-Nucleo board RevC
      • STM32F411xE and STM32F411RE-Nucleo board RevC
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -10611,20 +11194,24 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Patch release for STM32CubeF4, adding support of STM32F411xE devices with several enhancements and bugs fix
          -
        • In this release; only the Firmware components drivers are provided, the projects for the supported boards will be provided in the upcoming release V1.2.1

        • -
        • HAL and CMSIS
        • +
        • In this release; only the Firmware components drivers are provided, the projects for the supported boards will be provided in the upcoming release V1.2.1
        • +
      • +
      • HAL and CMSIS +
        • Add support of STM32F411xE devices
        • Several enhancements and bugs fix
        • -
        • Update startup files for EWARM toolchain to cope with compiler enhancement of the V7.x version

        • -
        • Middleware
        • +
        • Update startup files for EWARM toolchain to cope with compiler enhancement of the V7.x version
        • +
      • +
      • Middleware +
        • Use updated version V5.24b of STemWin; adding many new features, with PC simulation resources added and binaries compiled for high speed optimization
        • Add LibJPEG library for JPEG images encoding and decoding
        • -
        • Miscellaneous update and minor bugs fix

        • +
        • Miscellaneous update and minor bugs fix
      • BSP
          @@ -10634,7 +11221,7 @@

          Main Changes

      • Note: for the complete list of changes, please refer to the release notes of each Firmware component
      -

      Contents

      +

      Contents

      @@ -10916,17 +11503,17 @@

      Contents

      Drivers
      -

      Known Limitations

      +

      Known Limitations

      • None
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain v7.10.2
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain v5.10
      • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v5.0.0
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
      • STM32F429xx and STM32F429I-Discovery board RevB
      • @@ -10936,11 +11523,11 @@

        Supported Devices and EVAL boards<
      • STM32F401xE and STM32F401RE-Nucleo board RevC
      • STM32F411xE and STM32F411RE-Nucleo board RevC
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -10949,8 +11536,8 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • Add sources of STM324x9I-EVAL (both references MB1046 and MB1063), STM324xG-EVAL and STM32F429I-Discovery Demonstration (only for EWARM and MDK-ARM)
          @@ -10960,7 +11547,7 @@

          Main Changes

        • Miscellaneous update on Examples, Applications, Demonstrations and Templates projects for some boards; for more details refer to the associated release notes
        • Minor update in STM324x9I-EVAL, STM324xG-EVAL and STM32F429I-Discovery uSD and EEPROM BSP drivers
        -

        Contents

        +

        Contents

        @@ -11227,11 +11814,11 @@

        Contents

        Drivers
        -

        Known Limitations

        +

        Known Limitations

        • TrueSTUDIO projects are not provided for few Applications and Demonstrations (10 in total)
        -

        Development Toolchains and Compilers

        +

        Development Toolchains and Compilers

        • IAR Embedded Workbench for ARM (EWARM) toolchain V6.70.3
        • RealView Microcontroller Development Kit (MDK-ARM) toolchain v4.73 @@ -11240,7 +11827,7 @@

          Development Toolchains and Comp

      • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v4.3.0
      -

      Supported Devices and EVAL boards

      +

      Supported Devices and EVAL boards

      • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
      • STM32F429xx and STM32F429I-Discovery board RevB
      • @@ -11249,11 +11836,11 @@

        Supported Devices and EVAL boards<
      • STM32F401xC and STM32F401-Discovery board RevB
      • STM32F401xE and STM32F4xx-Nucleo board RevC
      -

      Backward Compatibility

      +

      Backward Compatibility

      • None
      -

      Dependencies

      +

      Dependencies

      • None
      @@ -11262,12 +11849,12 @@

      Dependencies

      -

      Maintenance release

      -

      Main Changes

      +

      Maintenance release

      +

      Main Changes

      • First official release of STM32CubeF4 (STM32Cube for STM32F4 Series)
      -

      Contents

      +

      Contents

      @@ -11469,13 +12056,13 @@

      Contents

      Drivers
      -

      Known Limitations

      +

      Known Limitations

      • STM324x9I-EVAL, STM324xG-EVAL and STM32F429I-Discovery Demonstrations sources will be provided in V1.1.0 release planned very soon
      • TrueSTUDIO projects are not provided for few Examples and Applications (7 in total)
      • MDK-ARM projects are not provided for 2 Applications (2 in total)
      -

      Development Toolchains and Compilers

      +

      Development Toolchains and Compilers

      • IAR Embedded Workbench for ARM (EWARM) toolchain V6.70.3
      • RealView Microcontroller Development Kit (MDK-ARM) toolchain v4.73 @@ -11484,7 +12071,7 @@

        Development Toolchains and Comp

    • Atollic TrueSTUDIO STM32 (TrueSTUDIO) toolchain v4.3.0
    -

    Supported Devices and EVAL boards

    +

    Supported Devices and EVAL boards

    • STM32F429xx/439xx devices and STM324x9I-EVAL board RevB
    • STM32F407xx/417xx devices and STM324xG-EVAL board RevC
    • @@ -11493,11 +12080,11 @@

      Supported Devices and EVAL boards<
    • STM32F429xx and STM32F429I-Discovery board RevB
    • STM32F401xE and STM32F4xx-Nucleo board RevC
    -

    Backward Compatibility

    +

    Backward Compatibility

    • None
    -

    Dependencies

    +

    Dependencies

    • None
    diff --git a/_htmresc/ReleaseNotes_Patch.html b/_htmresc/ReleaseNotes_Patch.html new file mode 100644 index 0000000000..56fb82897a --- /dev/null +++ b/_htmresc/ReleaseNotes_Patch.html @@ -0,0 +1,16 @@ + + +_htmresc\ReleaseNotes_Patch.html + + +

    STM32CubeF4 Firmware Package V1.28.1 / 31-May-2024

    + +
    +

    +Main Changes +

    + +
    • General updates to fix known defects and implementation enhancements.
    • Patch release to deploy HAL Ethernet enhancements.
    • General fixes to support GCC11 and GCC12 in all STM32CubeIDE projects.
    • Upgrade USB Device Lib to use V2.11.3.
    • Upgrade USB Host Lib to use V3.5.2.
    + +
    + \ No newline at end of file diff --git a/_htmresc/STM32Cube_2020.bmp b/_htmresc/STM32Cube_2020.bmp new file mode 100644 index 0000000000..10ed4ea108 Binary files /dev/null and b/_htmresc/STM32Cube_2020.bmp differ diff --git a/package.xml b/package.xml index 5407e0f0ec..254fe6e1fa 100644 --- a/package.xml +++ b/package.xml @@ -1,6 +1,6 @@ - - + +